javaScript 中var、let、const区别

116 阅读1分钟

区别

  1. 使用 var 声明变量,其作用域为该语句所在的 函数 内,且存在变量提升现象
  2. 使用 let 声明变量,其作用域为该语句所在的 代码块 内,不存在变量提升,且 let 不允许在同一个作用域内,声明同一个变量

代码块javascript 中一个{}内的代码,包括:fn(){}、if(){}...

用法

function fun() {
    let a = 1;
    let a = b; // 报错
}

let 不允许在同一个作用域内,声明同一个变量。

if (true) {
    let a = 1;
    var b = 2;
}
console.log(a); // 报错
console.log(b); // 2

if 语句属于代码块,是 let 的作用域,所以在外部获取不到。

变量提升

浏览器在运行代码之前会预解析,首先解析函数声明,变量定义,解析完后再对函数变量进行运算、赋值等。
使用 var 声明变量,无论 var 变量处于当前作用域的第几行,都将 var 变量提升到作用域的头部并初始化为 undefined;使用 let 时,不会初始化。

{
    console.log(a); // undefined
    console.log(b); // Uncaught ReferenceError: Cannot access 'b' before initialization
    var a = 'a';
    let b = 'b';
}

重复声明问题

let 不允许重复声明,与全局变量同时声明时会暂时锁死。

{
    // 重复声明
    let a = 'a';
    let a = 1; // Uncaught SyntaxError: Identifier 'a' has already been declared
}

// 暂时锁死的情况
let b = 'b';
if (true) {
    console.log(b); // 此时报错:Uncaught ReferenceError: Cannot access 'b' before initialization
    let b = 1;
    console.log(b);
}

const

const 声明的变量不允许修改,且必须初始化。

const a; // Uncaught SyntaxError: Missing initializer in const declaration