【发布时间】:2017-05-18 12:41:36
【问题描述】:
我正在了解 ES6 中的新功能。我对 let 的实际行为有疑问,让我们检查以下示例:
function aHero() {
return 'Boy'
}
function aFoil() {
return 'Rat'
}
function aDeed() {
return 'Deed'
}
let sagas = [];
let hero = aHero();
let newSaga = function () {
let foil = aFoil();
sagas.push(function () {
let deed = aDeed();
console.log(hero + deed + foil)
});
}
newSaga();
sagas[0]();
sagas[0]();
newSaga();
ES5:var 作用域变量到整个函数,所以当代码在浏览器中运行时,所有变量都被提升,另一方面在 ES6 let 作用域变量到它的块,所以当运行此代码saga[0]() 将打印三个单词'BoyDeedRat'
所以我想知道闭包是如何与 let 一起工作的??
【问题讨论】:
-
不清楚您在这里问的是什么 - 无论您在这些地方使用
let还是var(或const),这段代码都会产生相同的结果。 -
@JamesThorpe 是的,但是使用 var 是正常的,我想知道为什么它使用 let?
-
@HazemHagrass 为什么不能与
let一起使用?所有变量的作用域都是函数——这里没有额外的块。 -
@JamesThorpe 问题是调用发生在作用域之外,这个箔函数只是被推送到数组但在瓢之外调用
-
@HazemHagrass 是的,那是how closures work - 该函数在它被声明的
newSaga的范围内关闭。但无论foil是用let还是var在那个范围内。
标签: javascript ecmascript-6 closures