功能设置的范围是什么?

时间:2015-01-15 02:01:33

标签: javascript scope ecmascript-6

与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日,据我所知,在任何地方都没有完全支持,所以我不能自己去测试。

1 个答案:

答案 0 :(得分:1)

你混淆了两个彼此无关的概念。通过letvar进行变量范围只会影响这些变量的可见性。魔术关键字this是一个完全独立的机制。 this引用的内容取决于函数的调用方式。 scopelessFunc()differentScope()都以完全相同的方式调用函数,因此没有区别。如果你想要有所作为,你需要改变你打电话的方式:

someObj.scopelessFunc()
scopelessFunc.apply(someObj)

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