摘自codeburst网站:JAVASCRIPT ES2015版三分钟教学 — let和const的用法

133 阅读3分钟

译者:chaussen

原文链接


JAVASCRIPT ES2015版三分钟教学 — let和const的用法

三分钟学习var, let和const变量基础知识

letconst可声明码块中的范围变量,这些变量是ES2015版的新功能,除了具有范围性以外,这些变量也不能后置声明。接下来我们用三分钟时间探讨一下var, let, 和const变量的一些基础知识。

var变量,let变量和const变量的比较

**让我们看看这几个关键词声明的变量分别有什么含义。**先说var,它是三种变量中范围最大的。

**var** — 用var声明的变量可以赋予新的值或保留原值。在码块范围之内或之外都可以使用此变量。

**let** — let声明的变量作用范围比var变量稍小。这个变量也可以再赋予新的值,但它定义在哪个码块中就只能在这个码块范围内使用

**const** — const变量是三种变量中作用范围最小的,赋值后就不可以再更改,在码块中定义后就只能在此范围内使用。 (不过变量内在的属性可以修改)

码块范围

var声明的变量作用范围可以是全局或本地,其范围也可以限定在声明此变量的函数内部。而像if, for, while, {}等码块都不会影响var变量的作用范围。

另一方面,letconst变量范围则只限于定义此变量的码块内部 。让我们看一个例子:

let x = 1;

{
  let x = 2;
  console.log(x); // 范围内,x值是2
}

console.log(x); // 范围外,x值是1

如你所见,花括号产生了一个码块,这样就能限定码块内x变量的作用范围。

当然,我们也要注意一点。如果同一个码块范围内声明了两个同名的变量,程序就会报错:

let x = 1;
let x = 2;

Uncaught SyntaxError: Identifier 'x' has already been declared 句法错误:变量名‘x‘已经被声明

后置声明

letconst变量不可以后置声明,所以必须初始化后才能引用。

看看以下的例子:

function sayMeow(){
  console.log(cat); // undefined 此时cat变量可以引用,它的值是未定义
  console.log(dog); // Uncaught ReferenceError: dog is not defined 引用错误:dog变量没有定义

  var cat = 'meow';
  let dog = 'woof';
}

var变量可以后置声明,所以cat变量可以先用记录函数引用,引用时它的值是undefined。而let变量和const变量不能后置声明,所以dog变量还没有声明就引用了,程序会产生 ReferenceError错误。

const变量

我们最后来说一下const变量。前面说过let变量的码块范围原则,const变量同样适用。唯一的区别是const变量不能赋新的值。我们来看一个例子:

const cat = 'meow';
console.log(cat) // 'meow'

cat = 'woof'; 
// Uncaught SyntaxError: Identifier 'cat' has already been declared 句法错误:变量名‘cat’已经被声明

但是const变量并非完全不能修改。变量中的属性还是可以修改的。比如:

const cat = {
  sound: 'meow'
}

console.log(cat.sound); // 'meow'

cat.sound = 'woof';

console.log(cat.sound); // 'woof'

关键记忆点

  • var变量是三种变量中最范围最大的,已经使用这种变量的代码不会受新加的let变量和const变量影响。

  • 不要继续使用var变量。凡是不需要修改的变量都应该用const,反之用let