为什么.call(this)使用而不是括号

Nic*_*ler 5 javascript

有什么特别的原因我经常遇到:

(function() {
  console.log("Hello");
}).call(this);
Run Code Online (Sandbox Code Playgroud)

代替:

(function() {
  console.log("Hello");
})();
Run Code Online (Sandbox Code Playgroud)

传递this给对方时应该有同样的效果吗?

似乎有一些性能差异:http://jsperf.com/call-vs-parenthesis.

T.J*_*der 7

据推测,该函数中的代码使用this(你刚才拥有的console.log).在与版本call,this 内部的功能是一样的this外面.没有call,this函数内部是全局对象(松散模式)或undefined(严格模式).

如果你没有this在函数中使用,那么没有理由做这个call版本,我倾向于不这样做,因为这是额外的不必要的复杂性(显然是非常小的性能成本).