使用 call() 的显式绑定在 Javascript 中如何工作?

How does the explicit binding using call() works in Javascript?

如果在call()中传递null或者什么都不传递,是否会被认为是隐式绑定? 以下代码的输出应该是什么?不应该是2吗?我得到 'undefined'.

function foo() {
console.log( this.a );
}

var a = 2;

foo.call( null ); // 2

这是一个隐式绑定,您可以使用 console.log(this); 进行检查。它打印全局对象。因此,当 运行 在我的浏览器中时,您的代码会打印 2.

但是,这样的var a = 2;语句works differently in Node.js:它并没有创建一个属性的全局对象。所以 this.a 尝试访问一个不存在的成员,结果是 undefined.