let 与块级作用域
- 作用域:
某个成员能够起作用的范围 - 块:
花括号包裹起来的范围
2015之前
if(true){
var foo='zce'
}
console.log(foo);
es6
if(true){
let foo='zcw';
console.log(foo);
}
//外部无法访问foo
解决计数器中出现的问题
for(var i=0;i<3;i++){
for(var i=0;i<3;i++){
console.log(i);
}
console.log('内层结束 i='+i);
}
//内层var 声明覆盖了外层的声明
//改进:把var改为let
典型:
var elements=[{},{},{}];
for(var i=0;i<elements.length;i++){
elements[i].oncolick=function(){
console.log(i)
}
}
elements[2].onclick();
改进解决:
使用闭包解决 借助函数作用域摆脱全局作用域的影响
var elements=[{},{},{}];
for(var i=0;i<elements.length;i++){
elements[i].oncolick=(function(i){
return function(){
console.log(i);
}
})(i)
}
elements[2].onclick();