es6 for循環(huán)中l(wèi)et和var區(qū)別詳解
let和var區(qū)別:
for(var i=0;i<5;i++){ setTimeout(()=>{ console.log(i);//5個(gè)5 },100) } console.log(i);//5 console.log('=============') for(let j=0;j<5;j++){ setTimeout(()=>{ console.log(j);//0,1,2,3,4 },100) } console.log(j);//報(bào)錯(cuò) j is not defined
為什么 用let就可以顯示正確結(jié)果,而var就不可以呢?
var是全局作用域,有變量提升的作用,所以在for中定義一個(gè)變量,全局可以使用,循環(huán)中的每一次給變量i賦值都是給全局變量i賦值。
let是塊級(jí)作用域,只能在代碼塊中起作用,在js中一個(gè){}中的語句我們也稱為叫一個(gè)代碼塊,每次循環(huán)會(huì)產(chǎn)生一個(gè)代碼塊,每個(gè)代碼塊中的都是一個(gè)新的變量j;
es6中不是說let聲明變量不能重復(fù)聲明嗎?看下邊例子:
{ let a=123; } { let a=246; } console.log(a);//a is not defined; { var b=1; } { var b=2; } console.log(b);// 2;
{}代表一個(gè)塊,這個(gè)時(shí)候let聲明的變量只在這個(gè)塊中起作用,而這個(gè)塊對(duì)var聲明的變量不起作用。因?yàn)関ar是全局作用域。
let a=1; let a=2; //Uncaught SyntaxError: Identifier 'a' has already been declared //let不能重復(fù)聲明 let b=1; var b=2; // Uncaught SyntaxError: Identifier 'a' has already been declared //let不能重復(fù)聲明 var c=3; var c=4; console.log(c)//4;var可以重復(fù)聲明
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MVVM模式中ViewModel和View、Model有什么區(qū)別?
這篇文章主要介紹了MVVM模式中ViewModel和View、Model有什么區(qū)別?本文分別解釋了它們的功能和作用,然后總結(jié)了它之間的區(qū)別,需要的朋友可以參考下2015-06-06ES6基礎(chǔ)之?dāng)?shù)組和對(duì)象的拓展實(shí)例詳解
這篇文章主要介紹了ES6基礎(chǔ)之?dāng)?shù)組和對(duì)象的拓展,結(jié)合實(shí)例形式詳細(xì)分析了ES6數(shù)組和對(duì)象拓展運(yùn)算符、拓展方法的使用及相關(guān)操作技巧,需要的朋友可以參考下2019-08-08javascript中&&運(yùn)算符與||運(yùn)算符的使用方法實(shí)例
&&和||總是傻傻分不清,在這里詳細(xì)記錄一下吧,也給你們分享一下,所以這篇文章主要給大家介紹了關(guān)于javascript中&&運(yùn)算符與||運(yùn)算符的使用方法,需要的朋友可以參考下2021-11-11uni-app使用countdown插件實(shí)現(xiàn)倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了uni-app使用countdown插件實(shí)現(xiàn)倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11