请解释这里使用的hack(我可以看到null作为上下文传递给返回其上下文属性的函数。所以我无法清楚地理解这里实际发生了什么。
function getGlobal(){
return (function(){
return this.dust;
}).call(null);
}
答案 0 :(得分:6)
将上下文设置为null将使this
指向全局对象。因此,提供的代码将用作访问全局对象的dust
属性。
根据ECMA 262 v5的规格,10.4.3输入功能代码
if thisArg is null or undefined, set the ThisBinding to the global object.
答案 1 :(得分:3)
诀窍是使用这样一个事实,即如果你没有函数的接收者,则使用window
(实际上是已执行脚本的全局对象,因此名称)。
因此,这个技巧可以绕过最近的嵌入上下文中定义的属性(dust
)并使用全局对象中定义的属性。