一文搞懂let和const关键字ES6与块作用域 (作用域与闭包 - Ch3.4.3)

引入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关键字

constlet关键字引入的原因相仿,区别是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关键字来解决这个问题。

需要注意的是这个和函数闭包的概念需要区分开。

猜你喜欢

转载自blog.csdn.net/Littlelumos/article/details/128727571