函数执行上下文,浏览器与nodejs

Raa*_*n W 3 javascript node.js

以下函数在节点和浏览器中提供两种不同的结果:

(function funfunfun(root, factory) {
    console.log(root === this);
    factory(root);
})(this, function (root) {
    console.log(root === this);
});
Run Code Online (Sandbox Code Playgroud)

在节点中,它将输出两次false.在浏览器中,它将输出true两次,正如我所料.

所以问题是......为什么?

ssk*_*ssk 5

在浏览器中,在未绑定的函数中,this将指向窗口对象.这就是为什么你在浏览器中获得两个真相.

现在在nodejs中,窗口是等价的global.如果你跑步,this===global你将在repl中成真.

但从档案来看,这不等于global.
从脚本到命令行的节点中的全局变量赋值