JavaScript - var和let的区别

254 阅读1分钟

var和let的区别

  1.var没有块级作用域,let有块级作用域。

  2.var有变量提升,let没有变量提升。

  3.var可以重复声明,let不能重复声明。

  总的来说,使用let比使用var更严谨。

  举几个例子:

    for (var i = 0; i < 5; i++) {
    
    }
    console.log(i); // 5
    
    for (let j = 0; j < 5; j++) {
    
    }
    console.log(j); // 报错 Uncaught ReferenceError: j is not defined

var声明的i有全局作用域,而let声明的j只在for循环内可用(暂时性死区)。

ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。 总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

    if(2>1) {
        var a = 10;
    }
    console.log(a); // 10
    
    if(1>2) {
        var b = 5;
    }
    console.log(b); // undefined

  a和b会进行变量提升,然后第一个if满足条件,a的值变为10,第二个if不满足条件,b的值依然为undefined。