译者:chaussen
JAVASCRIPT ES2015版三分钟教学 — let和const的用法
三分钟学习var, let和const变量基础知识
let和const可声明码块中的范围变量,这些变量是ES2015版的新功能,除了具有范围性以外,这些变量也不能后置声明。接下来我们用三分钟时间探讨一下var, let, 和const变量的一些基础知识。
var变量,let变量和const变量的比较
**让我们看看这几个关键词声明的变量分别有什么含义。**先说var,它是三种变量中范围最大的。
**var** — 用var声明的变量可以赋予新的值或保留原值。在码块范围之内或之外都可以使用此变量。
**let** — let声明的变量作用范围比var变量稍小。这个变量也可以再赋予新的值,但它定义在哪个码块中就只能在这个码块范围内使用。
**const** — const变量是三种变量中作用范围最小的,赋值后就不可以再更改,在码块中定义后就只能在此范围内使用。 (不过变量内在的属性可以修改)
码块范围
用var声明的变量作用范围可以是全局或本地,其范围也可以限定在声明此变量的函数内部。而像if, for, while, {}等码块都不会影响var变量的作用范围。
另一方面,let和const变量范围则只限于定义此变量的码块内部 。让我们看一个例子:
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‘已经被声明
后置声明
let和const变量不可以后置声明,所以必须初始化后才能引用。
看看以下的例子:
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。