ECMA组织更新es的标准,是因为es5语言本身有着许多问题。简单说一下变量声明var存在的问题
1变量提升带来的困扰
思考如下代码
if(Math.random() - 0.5 > 0){
var a = 'a';
console.log(a);
}else{
console.log(a);
}
console.log(a)
// a ='a' || undefined
这是一个很怪异的现象,可能预期的是没有进入第一个判断,打印a会报错,然而由于var 关键字变量提升,变量a挂载到了全局window下,最开始值为undefined,所以当没有进入第一个判断时,a的值依然是undefined。
2污染全局变量
var age = 18;
console.log(window.age)//18
//age变量挂载到了全局window下,假如引入的多个js代码,其它js文件里面也有age变量,就会产生冲突。
3闭包问题
//经典闭包例子,假设页面有10个li标签
var lis = document.getElementsByTagName('li');
for(var i = 1; i <=lis.length;i++){
lis[i].onclick = function(){
console.log(i);
}
}
//预期点击Li出现1-10,然而都打印10。之前的解决办法是在for循环里面套上一个立即执行函数,虽然能解决问题,但代码阅读性较差。