(0, fn)(args)这种形式调用函数的目的是什么?

(0, fn)(args)应该是相当于fn(args)的,前者目的何在?

阅读 3.4k
3 个回答

这两个是有区别的,你试试:

const o = {a: 3, b() { console.log(this.a); }};
o.b();
(0, o.b)();

可以看看我之前的这个回答 https://segmentfault.com/q/10...

自问自答了
我举的例子有问题,把它改为(0, foo.fn)(args)更贴切
它的目的是切断fn中的this于foo的绑定关系,举个例子

window.name = 'Gina';
const person = {
  name: 'Alice',
  getName() {
    console.log(`My name is ${this.name}`);
  },
};

person.getName(); // My name is Alice
(0, person.getName)(); // My name is Gina

原理是,逗号表达式表示先执行左边,在执行右边,最终返回右边,(0, person.getName)相当于返回了person.getName的引用,相当于

const getName = person.getName;
getName(); // My name is Gina

看了楼上的回答,应该是改变了this指向,我的理解有问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题