【发布时间】:2015-01-15 02:01:32
【问题描述】:
let 与 var 相比,其作用域比 var 更紧密,但我想知道它是否会改变匿名函数的作用域?
例子:
class Foo {
method1() {
var scopelessFunc = this.method2;
// executed in global scope
scopelessFunc();
let differentScope = this.method2;
// what scope is this executed in? (what does method2 output)
differentScope();
}
method2() {
console.log(this);
}
}
注意:据我所知,截至今天 1 月 14 日, let 在任何地方都没有得到完全支持,所以我不能自己去测试。
【问题讨论】:
-
let仅声明变量可见的位置。不多也不少。 -
this仍然是全局对象,它与词法范围无关。this将取决于您如何调用该函数。 -
this 取决于您调用函数的方式,而不是调用函数的位置。它总是在当前执行上下文中解析(除了 ES6 中的箭头函数,它使用外部上下文的 this)。
-
不,调用函数的作用域从不影响执行函数本身的作用域。
-
谢谢!酷,我今天学到了一些东西!如果你们中的一个人将此作为答案发布,我可以接受,否则我将删除该问题。
标签: javascript scope ecmascript-6