将null作为上下文传递给函数调用

6
请解释此处使用的hack(我可以看到null被传递为上下文到返回其上下文属性的函数。所以我不太清楚这里实际上发生了什么。)
请解释此处使用的hack(我可以看到null被传递为上下文到返回其上下文属性的函数。所以我不太清楚这里实际上发生了什么。)
function getGlobal(){   
  return (function(){   
    return this.dust;   
      }).call(null);
}
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


3
这个技巧就是利用如果函数没有接收器,那么使用的是window(实际上是执行脚本的全局对象,因此得名)这一事实。因此,这个技巧可以绕过最近的嵌入上下文中定义的属性(dust),并使用在全局对象中定义的属性。

为什么不直接使用 window.dust 呢?全局对象有时候不是 window 吗? - KOGI
很少有这种情况,所以这样的代码很罕见。原因可能是您正在制作一个库,您希望它与非浏览器js引擎(例如node.js)兼容:那么全局对象不叫做window。但是通常情况下,在制作库时,要避免访问全局对象... - Denys Séguret

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接