函数集 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 在任何地方都没有得到完全支持,所以我不能自己去测试它。
您混淆了两个彼此无关的概念。通过 let
和 var
的变量范围只会影响这些变量的可见性。魔术关键字 this
是一个完全独立的机制。 this
指的是什么取决于调用函数的方式。 scopelessFunc()
和 differentScope()
调用函数的方式完全相同,所以没有区别。如果你想有所作为,你需要改变你对他们的称呼:
someObj.scopelessFunc()
scopelessFunc.apply(someObj)
这是影响 this
的唯一因素,通过 var
或 let
定义的 someObj
或 scopelessFunc
无关紧要。
与 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 在任何地方都没有得到完全支持,所以我不能自己去测试它。
您混淆了两个彼此无关的概念。通过 let
和 var
的变量范围只会影响这些变量的可见性。魔术关键字 this
是一个完全独立的机制。 this
指的是什么取决于调用函数的方式。 scopelessFunc()
和 differentScope()
调用函数的方式完全相同,所以没有区别。如果你想有所作为,你需要改变你对他们的称呼:
someObj.scopelessFunc()
scopelessFunc.apply(someObj)
这是影响 this
的唯一因素,通过 var
或 let
定义的 someObj
或 scopelessFunc
无关紧要。