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