Javascript 使用“调用回调函数”的正确方法;这";

Javascript 使用“调用回调函数”的正确方法;这";,javascript,callback,this,babeljs,Javascript,Callback,This,Babeljs,此上下文对于使用正确的“this”上下文调用回调函数有效吗 data.on('load',doSomething.call(this)) 或者使用一个额外的arrow函数更好(是的,我正在使用babel进行编译) data.on('load', () => { doSomething.call(this); }); 这两种浏览器在Chrome中的结果似乎相同,但没有检查其他浏览器。是否有最佳实践或一种方式比另一种方式更受支持?以下程序将立即调用doSomething,并将返回值指定为

此上下文对于使用正确的“this”上下文调用回调函数有效吗

data.on('load',doSomething.call(this))

或者使用一个额外的arrow函数更好(是的,我正在使用babel进行编译)

data.on('load', () => {
  doSomething.call(this);
});

这两种浏览器在Chrome中的结果似乎相同,但没有检查其他浏览器。是否有最佳实践或一种方式比另一种方式更受支持?

以下程序将立即调用
doSomething
,并将返回值指定为事件侦听器:

data.on('load', doSomething.call(this));
您可能希望:


您的arrow函数也可以使用。

您需要使用您期望的
值创建一个函数

bind
创建要稍后调用的函数,
call
仅调用该函数并给出结果

data.on('load',doSomething.bind(this));

为了回答您关于箭头语法的问题,虽然这在功能上类似于call:
()=>{doSomething.call(this)}
,但生成的代码还有一层闭包

function() {
    doSomething.call(this);
}.bind(this);
这样做将有一个小的性能损失,虽然它应该可以忽略不计

function() {
    doSomething.call(this);
}.bind(this);