ECMAScrip-ES6-新变量-let--注意块级作用域

1、 let的声明:


	

2、let变量不能重复声明,var可以


	

Uncaught SyntaxError: Identifier 'i' has already been declared-------let变量不能重复声明

3、在ES5中有3种作用域:全局、函数、eval(ES5的严格模式),ES6-let-块级作用域-let 是在代码块内有效


	

Uncaught ReferenceError: girl is not defined at let.html:14:15————let块级作用域--不单指花括号--还有while if else for 循环语句也是块级作用域

var没有块级作用域--在全局的window上读取

4、let 不存在变量提升,var 会变量提升————


	

var相当于会在前面声明 var a ,var当脚本开始运行的时候,a已经存在了,但是还没有赋值


	

Uncaught ReferenceError: Cannot access 'a' before initialization

5、let 不影响作用链效果


	

let实现:点击切换颜色_this实现




	
	
	let
	


	
//var全局变量 直接var=2 只执行一次
{var i=0
				items[i].onclick=function(){
				
				items[i].style.background='pink'
	
				}
			}
			{var i=1
				items[i].onclick=function(){
				
				items[i].style.background='pink'
	
				}
			}
			{var i=2
				items[i].onclick=function(){
				
				items[i].style.background='pink'
	
				}
			}

Uncaught TypeError: Cannot read properties of undefined (reading 'style') --var属性是全局--已经是i=3其中的item[i]会不存在,let块级作用域,i 只在本轮循环中有效,每次循环的 i其实都是一个新的变量

	{let i=0
				items[i].onclick=function(){
				
				items[i].style.background='pink'
	
				}
			}
			{let i=1
				items[i].onclick=function(){
				
				items[i].style.background='pink'
	
				}
			}
			{let i=2
				items[i].onclick=function(){
				
				items[i].style.background='pink'
	
				}
			}
	

ECMAScrip-ES6-新变量-let--注意块级作用域_第1张图片

你可能感兴趣的