首先看一段代碼:
for(var i=0;i<5;i++){
setTimeout(()=>{
console.log(i);// 5個(gè)5
},100)
}
console.log(i);// 5
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
區(qū)別:
var是全局作用域,有變量提升的作用导俘,所以在for中定義一個(gè)變量妇垢,全局可以使用夭委,循環(huán)中的每一次給變量i賦值都是給全局變量i賦值
let是塊級(jí)作用域,只能在代碼塊中起作用,在js中一個(gè){}中的語(yǔ)句我們也稱為叫一個(gè)代碼塊能岩,每次循環(huán)會(huì)產(chǎn)生一個(gè)代碼塊寞宫,每個(gè)代碼塊中的都是一個(gè)新的變量
結(jié)論:
在for循環(huán)中,定義自變量不要用var
拉鹃,使用let
原文地址: