返回

高效入门JavaScript:理解let与var的奥妙

前端

在JavaScript中,变量声明是通过let和var完成的。这两个关键字都有各自的特性和用法,理解它们的差异对于写出高质量的代码至关重要。

let与var的比较

特性 let var
作用域 块级 函数级或全局级
暂时性死区
重复声明 不允许 允许
默认值 undefined undefined

let:块级作用域

let声明的变量具有块级作用域,这意味着它们只能在声明所在的块内被访问。块可以是花括号包围的代码块,也可以是函数体。例如:

{
  let x = 10;
  console.log(x); // 10
}

console.log(x); // ReferenceError: x is not defined

在上面的代码中,变量x在花括号内声明,因此它的作用域仅限于该花括号内。当执行console.log(x)时,由于x在花括号外不可访问,因此会抛出ReferenceError异常。

var:函数级或全局级作用域

var声明的变量具有函数级或全局级作用域,这意味着它们可以在声明所在的函数内或全局范围内被访问。例如:

function myFunction() {
  var x = 10;
  console.log(x); // 10
}

myFunction();

console.log(x); // ReferenceError: x is not defined

在上面的代码中,变量x在函数myFunction中声明,因此它的作用域是整个函数体。当执行console.log(x)时,由于x在函数体内可见,因此会输出10。然而,当执行console.log(x)时,由于x在函数外不可访问,因此会抛出ReferenceError异常。

let:暂时性死区

let声明的变量存在暂时性死区,这意味着在变量声明之前,该变量是不可访问的。例如:

console.log(x); // ReferenceError: x is not defined

let x = 10;

在上面的代码中,变量x在console.log(x)之前声明,因此在执行console.log(x)时,由于x尚未声明,因此会抛出ReferenceError异常。

let:不允许重复声明

let声明的变量不允许在相同作用域内重复声明。例如:

let x = 10;
let x = 20; // SyntaxError: Identifier 'x' has already been declared

在上面的代码中,变量x在相同作用域内重复声明,因此会抛出SyntaxError异常。

let与var的默认值

let和var声明的变量默认值都是undefined。这意味着在变量赋值之前,它们的