6

请解释这里使用了什么 hack(我可以看到 null 作为上下文传递给返回其上下文属性的函数。所以我无法清楚地理解这里实际发生了什么。

function getGlobal(){   
  return (function(){   
    return this.dust;   
      }).call(null);
}
4

2 回答 2

6

将上下文设置为 null 将this指向全局对象。因此提供的代码将充当访问dust全局对象的属性。

根据 ECMA 262 v5 规范 10.4.3 输入功能码

if thisArg is null or undefined, set the ThisBinding to the global object.

http://es5.github.com/#x10.4.3

于 2012-09-04T08:09:16.167 回答
3

诀窍是使用这样一个事实,即如果您没有函数的接收者,window(实际上是执行脚本的全局对象,因此得名)。

所以这个技巧可以绕过dust在最近的嵌入上下文中定义的属性 (),并使用在全局对象中定义的属性。

于 2012-09-04T08:07:11.143 回答