与var相比,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日,据我所知,在任何地方都没有完全支持,所以我不能自己去测试。
答案 0 :(得分:1)
你混淆了两个彼此无关的概念。通过let
和var
进行变量范围只会影响这些变量的可见性。魔术关键字this
是一个完全独立的机制。 this
引用的内容取决于函数的调用方式。 scopelessFunc()
和differentScope()
都以完全相同的方式调用函数,因此没有区别。如果你想要有所作为,你需要改变你打电话的方式:
someObj.scopelessFunc()
scopelessFunc.apply(someObj)
这是影响this
的唯一因素,someObj
或scopelessFunc
是通过var
还是let
定义无关紧要。