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)文章
JS對(duì)象數(shù)組中如何匹配某個(gè)屬性值
這篇文章主要介紹了JS對(duì)象數(shù)組中如何匹配某個(gè)屬性值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
JavaScript設(shè)置IFrame高度自適應(yīng)(兼容各主流瀏覽器)
IFrame高度的設(shè)置問題一直都是前端的噩夢(mèng)而且還要兼容各主流瀏覽器更是難上加難了,下面與大家分享下一個(gè)不錯(cuò)的技巧,感興趣的你可以參考下哈2013-06-06
HTML5 Shiv完美解決IE(IE6/IE7/IE8)不兼容HTML5標(biāo)簽的方法
這篇文章主要介紹了HTML5 Shiv完美解決IE(IE6/IE7/IE8)不兼容HTML5標(biāo)簽的方法,需要的朋友可以參考下2015-11-11
使用mixins實(shí)現(xiàn)elementUI表單全局驗(yàn)證的解決方法
這篇文章主要介紹了使用mixins實(shí)現(xiàn)elementUI表單的全局驗(yàn)證的解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
js動(dòng)態(tài)創(chuàng)建及移除div的方法
這篇文章主要介紹了js動(dòng)態(tài)創(chuàng)建及移除div的方法,涉及javascript針對(duì)頁面元素的動(dòng)態(tài)操作技巧,需要的朋友可以參考下2015-06-06

