ES6变量定义与解构

1.Let关键字

Let是ES6的新增关键字,用来声明变量,它的用法和 var 的用法类似,但是let只在自己所在的代码区域内有效.
  • 例:
//var

var a = [];
	for(var i = 0;i < 10 ;i++){
   
	       a[i] = function(){
   
           console.log(i);
       }
}
a[6](); // 结果为10

var 定义的变量遇到for循环的大括号后是不会行程作用域的.所以在上面代码调用时,调用的是一个全局的变量.

//let
var a = [];
	for(let i = 0;i < 10 ;i++){
   
	       a[i] = function(){
   
           	console.log(i);
       }
}
a[6](); // 结果为6

以上代码中,i是使用 let 声明的,当前的 i 只在本轮的循环中有效.每一个循环中放入 i 其实都是一个新的变量.所以输出是6

for (let i = 0; i < 3; i++) {
   
  let i = "abc";
  console.log(i); 
 }
 
//结果:输出3次abc
//原因:在代码块中的变量 i 与 for 循环中的变量 i 不再同一个作用域中;

1.1 let不存在变量提升

var 存在变量提升.即变量在声明之前使用时,值为undefined , js会将声明语句放在所有js代码之前执行则 let则不存在变量提升.

	console.log(a);
	var a = 10;
	//相等于
	var a;
	console.log(a);
	a = 10;
	console.log(a);
	let a = 10;
	
// 提示错误Cannot access 'a' before initialization

1.2不允许重复声明

  • let 不允许在相同的作用域中,重复声明同一个变量
	let a = "hello";
	let a = "world";  
	console.log(a);
	
	//报错: Identifier 'a' has already been declared
	function show(a){
   
		let a = 10;
	}
	show(100);
	
	//Identifier 'a' has already been declared

以上代码中,函数的参数 a 与函数内部的 a作用域相等,所以会报错。

	function show(a){
   
        {
   
            let a = 10;
        }
    }
    show(100);

1.3 暂时性死区

	var tmp = 123;
    if(true){
   
        tmp = "abc";
        let tmp;
        console.log(tmp);
    }

结果:提示错误 Cannot access 'a' before initialization
使用变量时,会先寻找同一作用域下的变量。以上代码中,tmp=abc会优先寻找到下面的let tmplet tmp不存在变量提升,所以提示错误。
总结:在代码块中,使用 let命令声明变量之前,该变量都是不可用状态,在语法上,称为“暂时性死区”

2.块级作用域

2.1为什么需要块级作用域

ES5 只有全局作用域和局部作用域(函数作用域),没有块级作用域。

  • 缺点1:内部变量可能覆盖外层的变量
	var date = new Date();
	function f(){
   
	    console.log(date);
	    if(false){
   
	    	var date 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值