返回

ES6赋能程序员:var、let和const之辨

前端

一直以来,JavaScript 中的变量声明只有 var 一种方式。虽然 var 足以满足基本的需求,但随着 JavaScript 的不断发展和复杂性的增加,var 的局限性也逐渐显现出来。

ES6 为了解决这些问题,引入了 letconst 两种新的变量声明方式。这三种声明方式各有千秋,在不同的场景下有不同的适用性。

1. 变量声明

var 声明的变量在整个函数作用域内有效。这意味着,如果在一个函数中声明了一个 var 变量,那么在这个函数的任何地方都可以访问这个变量。

function func() {
  var x = 10;
  if (x > 5) {
    var y = 20;
  }
  console.log(y); // 20
}

func();

let 声明的变量只在声明所在的花括号内有效。这意味着,如果在一个函数中声明了一个 let 变量,那么在这个函数的任何地方都可以访问这个变量,但是出了这个花括号,就不能访问了。

function func() {
  let x = 10;
  if (x > 5) {
    let y = 20;
  }
  console.log(y); // ReferenceError: y is not defined
}

func();

const 声明的变量是只读的,这意味着一旦声明了 const 变量,就不能再改变它的值。

function func() {
  const x = 10;
  x = 20; // TypeError: Assignment to constant variable.
}

func();

2. 作用域

var 声明的变量的作用域是整个函数作用域,而 letconst 声明的变量的作用域是声明所在的花括号。

3. 应用场景

var 一般用于声明全局变量和函数作用域内的变量。

let 一般用于声明局部变量和循环变量。

const 一般用于声明常量。

在实际开发中,letconst 更受推崇。因为 letconst 可以避免变量提升的问题,并且可以更清晰地表达变量的作用域。

举个例子

function func() {
  var x = 10;
  if (x > 5) {
    var y = 20;
  }
  console.log(y); // 20
}

func();

这段代码中,y 变量被声明在了 if 语句中,但是它却可以在 if 语句的外部访问。这是因为 var 声明的变量在整个函数作用域内有效。

function func() {
  let x = 10;
  if (x > 5) {
    let y = 20;
  }
  console.log(y); // ReferenceError: y is not defined
}

func();

这段代码中,y 变量被声明在了 if 语句中,但是它却不能在 if 语句的外部访问。这是因为 let 声明的变量只在声明所在的花括号内有效。

总之,letconst 的出现极大地丰富了 JavaScript 的变量声明方式,让程序员可以更加灵活和安全地使用变量。