摘要:純屬個人理解,如有問題還請指出在聲明的內存在一個變量,會存在引擎內部。
純屬個人理解,如有問題還請指出~
在聲明的()內存在一個變量 i,會存在 JavaScript 引擎內部。 每一次循環的時候, JavaScript 引擎內部會記住上一輪循環的值,然后將新的 i 的值賦值給 i
for (let i = 0; i < 3; i++) { let i = "abc"; console.log(i); } //abc //abc //abc
由于let塊級作用域,for()內的let 相當于有個隱藏的父作用域,for{}循環體內的let 是新的子作用域,重新聲明一個 i;不會影響()里 i 的值
for (let i = 0; i < 3; i++) { i = "abc"; console.log(i); } //abc
但是如果不聲明 i,直接給 i 賦值,會影響()里 i 的值,說明()是循環體的上一級作用域,在循環體里直接改變 i 的值會影響上一級作用域里的 i 值
for (var i = 0; i < 3; i++) { var i = "abc"; console.log(i); } //abc
相當于
1 先var i;
2 再執行 for 循環
3 第一次 i = 0 滿足條件 進入循環體,由于 var 沒有塊級作用域的概念,所以會重新聲明修改for循環外全局作用域的 i 的值,從而影響了循環變量的值,導致后面條件不滿足進入不到循環體,所以只輸出一次
for (var i = 0; i < 3; i++) { let i = "abc"; console.log(i); } //abc //abc //abc
循環變量 i 是全局作用域,循環體內 let i 為塊級作用域內的變量,不影響全局變量,輸出三次
for (let i = 0; i < 3; i++) { var i = "abc"; console.log(i); } //Uncaught SyntaxError: Identifier "i" has already been declared
!!! 不太理解這個為什么會報錯,希望懂得的小伙伴們給個指導
個人迷惑的地方:報這個錯是因為在同一個作用域下重復聲明變量 i,但是{}內的var i 為 全局作用域下的 i ,()內的 let i 屬于()的作用域,兩個不同的作用域為什么會報錯呢???
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/106608.html
摘要:原文鏈接在這之前先要了解一下循環中和的區別是函數級作用域或者全局作用域,是塊級作用域看一個例子循環中的邏輯代碼函數下的輸出,全局下的不存在現在我們把換為循環中的邏輯代碼報錯了,不在函數作用域下,當然肯定也不會再全局下因為和的這個區別當然和的 原文鏈接在這之前先要了解一下 for循環中let 和var的區別 var 是函數級作用域或者全局作用域,let是塊級作用域看一個例子 fu...
摘要:塊級作用域存在于函數內部塊中字符和之間的區域和塊級聲明用于聲明在指定塊的作用域之外無法訪問的變量。和都是塊級聲明的一種。值得一提的是聲明不允許修改綁定,但允許修改值。這意味著當用聲明對象時沒有問題報錯臨時死區臨時死區,簡寫為。 塊級作用域的出現 通過 var 聲明的變量存在變量提升的特性: if (condition) { var value = 1; } console.lo...
摘要:聲明會組織對變量綁定和對自生值的修改,這意味著聲明并不會組織對變量成員的修改。循環中的塊級綁定在此處仍然可被訪問輸出的結果并不是預期的值而是是因為聲明導致的變量的提升。全局塊級綁定與不同于的另一個方面是在全局作用域上的表現。 變量聲明一直是js工作中最微妙的一部分,它不像C語言一樣,變量總是在被它創建的時候聲明,js語言可以允許你在你需要聲明變量的時候進行聲明。 var let co...
摘要:聲明變量不存在變量提升。臨時死區,而且不能在聲明之前訪問它。禁止重復聲明相同的變量,否則報錯。不存在變量提升,一旦執行快外就會立即銷毀。聲明不允許修改綁定,但允許修改值,也就是說用創建對象后,可以修改該對象的屬性值。 知識點 var 聲明變量: 1、存在變量提升,實際上var無論在哪里聲明,都會被當做當前的作用域頂部聲明變量。 2、可以重復聲明,后聲明的變量會覆蓋前聲明的變量。 let...
摘要:同時這個變量立即被初始化,初始值為當語句執行到賦值語句時,這個變量改變其初始值。對一個還未初始化的變量進行操作將會引起。循環和循環使用申明變量時和循環一樣。的運行過程和三者的表現和在循環過程中相似。 let和const 標簽(空格分隔): es6 let命令 這個命令是用來申明變量的,但是和es5不同的是,用它來聲明的變量是局部變量,存在于局部作用域(blocked scope): ...
閱讀 1855·2021-11-25 09:43
閱讀 1496·2021-09-02 15:21
閱讀 3461·2019-08-30 15:52
閱讀 1507·2019-08-30 12:48
閱讀 1304·2019-08-30 10:57
閱讀 2934·2019-08-26 17:41
閱讀 683·2019-08-26 11:59
閱讀 1374·2019-08-26 10:41