let和var的区别

 

let 声明了一个块级域的局部变量,并且可以给它一个初始化值。

 

 

1,let和var的作用域不同:

let 允许把变量的作用域限制在块级域中。

 

var 申明变量要么是全局的,要么是函数级的,而无法是块级的。

 

function test() {
  var x = 2;
  if (true) {
    var x = 1;  
    console.log(x);  
  }
  console.log(x);  
}

 结果为:

 

 

1
1

 因为var的作用域是函数级,所以if大括号里的var x = 1给x赋予了新值。下面的输出也为新值。

 

function test() {
  let x = 2;
  if (true) {
    let x = 1;  
    console.log(x);  
  }
  console.log(x);  
}

结果为:

1
2

  let作用域是块级别的,if里面的let x = 1为一个新变量,if结束之后消失,与上面的x无关,所以输出依然是2.

 

 

2,let 有暂存死区

function test() {
   var x;
   var x;
}
//不会发生错误

 

function test() {
   let x;
   let x;
}
//会引起TypeError异常

    因为在 ECMAScript  2015中,  let 将会提升这个变量到语句块的顶部。然而,在这个语句块中,在变量声明之前引用这个变量会导致一个 ReferenceError的结果, 因为let变量 在"暂存死区" (从块的开始到声明这段).

 

 

3,let与var对比

var a = 5;
var b = 10;

if (a === 5) {
  let a = 4;
  var b = 1;

  console.log(a);  
  console.log(b);  
} 

console.log(a); 
console.log(b); 

 结果为:

4
1
5
1
//因为var和let作用域不同,if大括号内的let a在大括号结束后消失,而b为var,作用域是函数,所以为1

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值