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