以下函数在节点和浏览器中提供两种不同的结果:
(function funfunfun(root, factory) {
console.log(root === this);
factory(root);
})(this, function (root) {
console.log(root === this);
});
在节点中,它将输出两次false。在浏览器中,它会输出两次,如我所料。
所以问题是......为什么?
答案 0 :(得分:5)
在浏览器中,在未绑定的函数中,this
将指向窗口对象。这就是为什么你在浏览器中得到两个真理。
现在在nodejs中,窗口的等价为global
。如果你运行this===global
,你将在repl。
但是从档案来看,这不等于global
global variable assignment in node from script vs command line
答案 1 :(得分:2)
这可能已经知道,但只是想添加@ Subin的答案,如果你明确地将函数绑定到相同的那个,它将返回true,无论是在脚本内还是REPL。
(function funfunfun(root, factory) {
console.log(root === this);
factory(root);
}).call(this, this, (function (root) {
console.log(root === this);
}).bind(this, this));
此外,this answer提供有关全局对象的良好信息。