let const var区别

1,768 阅读1分钟

作用域不同

var是函数作用域

函数内部声明了var,整个函数内都是有效的,比如,在for循环内定义一个var变量,实际上在for循环外意思可以访问的

for(var x=0;x<5;x++){
    //
}
console.log(x)  //5

x结果为 5 因为for内部循环到4,外部再此访问变量x时,因为var声明的x是全局变量,通过变量提升到了for循环外部,所以跳出循环后值为5

let是块级作用域 比如在for循环内用let声明变量,,在器外部是不可以访问的。

for(let x=0;x<5;x++){
    //
}
console.log(x)  //Uncaught ReferenceError: x is not defined

x值报错:Uncaught ReferenceError: x is not defined

定义之前访问

let不能在定义之前访问访问该变量,但是var可以。即let必须先定义再使用,而var则可以,只是var未定义使用,其值为underfined。

console.log(x) // underfined
var x

console.log(y) // Uncaught ReferenceError: Cannot access 'x' before initialization
let y 

let不能被重新定义,var可以

function Num(){
            console.log(x)
       }
       var x = 3;
       Num();  //3
       var x = 4;
       Num();  //4
function Num(){
            console.log(x)
       }
       let x = 3;
       Num()
       let x = 4;
       Num();  // Uncaught SyntaxError: Identifier 'x' has already been declared

小结:从规范角度来说,更推荐let,const这些