在 ES6 中,let 和 const 是两种新的变量声明方式,相较于 var,它们在作用域、变量声明方式和变量值不可被修改性方面有了更多的掌控。
Let 声明
let 声明的变量是块级作用域,与 var 不同,let 变量只在当前代码块内有效。let 声明的变量不会被提升,必须先声明再使用。
如下代码示例:
(function() { console.log(x); // undefined var x = 'var x'; console.log(y); // 报错:ReferenceError: y is not defined let y = 'let y'; })();
在上述代码中,由于 var 变量存在变量提升(它的声明在使用前已经被处理),所以在函数内部打印 x 变量,虽然在赋值语句后输出,但它的声明被提升到了代码块的顶部,所以这里的输出结果是 undefined。
而 let 变量不存在变量提升,所以代码块内的let变量 y 只在其所在的代码块内有效,因此在输出 y 变量之前使用它是个未声明的变量,所以 JavaScript 引擎会抛出一个未定义的参考错误。
Const 声明
const 声明的变量具有 let 变量所有的特性,唯一不同的是,const 声明的变量一旦被赋值,其值就不再可被修改。因此,const 常量必须在声明时进行初始化。
以下代码示例,展示了如何使用 const 关键字创建常量变量:
const num = 10; num = 20; // 报错: TypeError: Assignment to constant variable.
在上面的代码中,常量变量 num 被声明并被初始化为 10。由于 num 是常量变量且已经被初始化,任何尝试改变该值的尝试都会报错。这是 JavaScript 引擎更好地保护常量变量不被误修改的机制。
let 和 const 的应用场景
- 在 for 循环中使用 let 声明变量
在 for 循环中,相对于使用 var 声明,使用 let 声明变量能够避免循环变量泄露到全局作用域。如下代码示例:
for (let i = 0; i < 10; i++) { console.log(i); } console.log(i); // 报错:ReferenceError: i is not defined
- 使用 const 声明不变的常量值
使用 const 声明常量不仅仅可以避免在程序中不可控的改变常量的值,还可以让代码更加易于理解。另外,在 JavaScript 中字符串常量经常使用 const 声明。如下代码示例:
const PI = 3.14; const NAME = '小明';
总结
使用 let 和 const 声明变量不仅可以使 JavaScript 代码更加结构化和易于理解,还可以帮助防止在程序中因变量的作用域和可变性引起的许多错误。在编写 JavaScript 代码时,应尽量优先使用 let 和 const 来声明变量,并避免使用 var 变量声明。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645a0212968c7c53b0c20734