在ECMAScript5.1中 “var”的作用域为当前的函数,而不是当前代码块。
所以在使用定时器时:
for(var i = 0; i < 5; i++){
setTimeout(function(){
console.log(i)
}, 200*i);
}
//5,5,5,5,5
故应将定时器设置的相关代码包裹在函数中进行调用,以避免该问题:
for(var i = 0; i < 5; i++){
(function(index){
setTimeout(function(){
console.log(index)
}, 200*index);
})(i);
}
//0,1,2,3,4
在ECMAScript6中,可在代码块中使用“let”.
需要注意的是,let需先声明再使用,相同作用域内不可重复申明
for(let j = 0; j < 5; j++){
setTimeout(function(){console.log(j)}, 200*j);
//0, 1, 2, 3, 4
}
//console.log(j); //报错
2018-05-17:
ES6现在几个浏览器兼容?我就是转行也不会用的!
嗯,真香!