引入let关键字
首先看一段代码:
var foo = true;
if (foo) {
var bar = boo * 2;
bar = something(bar);
console.log(bar);
}与C++和Java之类的语言不同,if块中的变量bar并不会随着if结束消亡,var关键字在这里声明了一个全局变量,为了解决这个问题ES6引入了let关键字。
var foo = true;
if (foo) {
let bar = boo * 2; // use let here
bar = something(bar);
console.log(bar);
}引入const关键字
const和let关键字引入的原因相仿,区别是const创建的值是固定的,任何修改他的操作都是非法的。
var foo = true;
if (foo) {
var a = 2;
const b = 3;
a = 3; // 可以
b = 4; // 不可以
}关于块作用域
简单理解,一般来说 { ... } 这样的括号就会生成一个块作用域气泡,但JavaScript中的if和for并不会这样。
在ES3中使用try/catch结构会生成块作用域,在ES6才引入了let和const关键字来解决这个问题。
需要注意的是这个和函数闭包的概念需要区分开。
文章介绍了ES6为解决全局变量污染和变量作用域问题引入的let和const关键字。let允许在块级作用域内声明变量,而const则用于创建不可变的常量。同时,文章提到了JavaScript中块作用域的特殊性,如if和for不会生成块作用域,而try/catch在ES3中才会创建块作用域。

被折叠的 条评论
为什么被折叠?



