函数集 let 有什么范围?

what scope does a function set to let have?

与 var 相比,let 的范围比 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 在任何地方都没有得到完全支持,所以我不能自己去测试它。

您混淆了两个彼此无关的概念。通过 letvar 的变量范围只会影响这些变量的可见性。魔术关键字 this 是一个完全独立的机制。 this 指的是什么取决于调用函数的方式。 scopelessFunc()differentScope() 调用函数的方式完全相同,所以没有区别。如果你想有所作为,你需要改变你对他们的称呼:

someObj.scopelessFunc()
scopelessFunc.apply(someObj)

这是影响 this 的唯一因素,通过 varlet 定义的 someObjscopelessFunc 无关紧要。