使用let声明变量

es5声明变量的问题

1.全局变量挂载到全局对象:全局对象成员污染问题。
let声明的变量不会挂载到全局对象。

2.允许重复的变量声明,导致变量被覆盖。
let声明的变量不允许当前作用域范围内重复声明。

3.变量提升:怪异的数据访问,闭包问题。

使用let不会有变量提升,因此,不能在定义变量之前使用它

底层实现上,let声明的变量实际上也会有提升,但是,提升后会将其放入到“暂时性死区”,如果访问的变量位于暂时性死区,则会报错。当代码运行到公司变量的声明语句时,会将其从暂时性死区移除。

在循环中,用let声明的循环变量会特殊处理,每次进入循环体都会开启一个新的作用域,并且将循环变量绑定到该作用域(每次循环,使用的是一个全新的循环变量)。

在循环中使用let声明的循环变量,在循环结束后会销毁。

 for (let i = 0; i < 10; i++) {            
	 var btn = document.createElement('button');            
	 btn.innerHTML = "按钮"  + i;
	 document.getElementById('main').appendChild(btn);            
	 btn.onclick = function(){                
	 	console.log(i)            
	 }                   
 }
 console.log(i)     //报错        
 console.log(name); //报错        
 let name = "abc";
发布了8 篇原创文章 · 获赞 1 · 访问量 272

猜你喜欢

转载自blog.csdn.net/qq_43554231/article/details/104028357
今日推荐