ES6

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();
上一篇:Java Program Transformation


下一篇:CopyOnWriteArrayList 的使用与源码分析