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

 

猜你喜欢

转载自2914905399.iteye.com/blog/2316229