异步库中`root = ...`代码的目的是什么?

Fcz*_*bkk 9 javascript

Async库中有这段代码:

if (typeof window == 'object' && this === window) {
    root = window;
}
else if (typeof global == 'object' && this === global) {
    root = global;
}
else {
    root = this;
}
Run Code Online (Sandbox Code Playgroud)

所有这些代码都有什么理由吗?为什么没有作者才使用root = this

第一个条件仅在何时this === window,因此root = window并且root = this应该是等效的.第二种情况也是如此,root = global应该相当于root = this.

我在这里错过了什么吗?

Den*_*ret 7

它不仅是多余的,而且似乎也是错误的.

就在你的片段之前,有这样的:

// global on the server, window in the browser
var root, previous_async;
Run Code Online (Sandbox Code Playgroud)

所以目标是分配给root全局对象.

应该对这样的库进行编码以在严格模式下工作(不仅在严格模式下,它至少应该是兼容的).在严格模式下,IIFE执行的上下文是undefined.此代码始终无法在严格模式下找到根对象,无论是在节点还是在浏览器中.

请注意,有可靠的方法来查找根对象.标准的是进行间接呼叫:

var root = (1,eval)('this');
Run Code Online (Sandbox Code Playgroud)