在现代JavaScript中是否存在以前使用“bind”的情况下不能使用箭头函数的情况?

时间:2017-09-23 02:35:27

标签: javascript ecmascript-6 this bind arrow-functions

我还在学习bind和箭头功能的细节。

似乎无论我们以前在哪里使用bind,我们现在应该使用箭头功能,但我还没有看到它完全拼写出来。

所以我想知道这是否属实,或者是否有些情况我们仍然应该使用bind,即使箭头函数可能有效,或某些情况下箭头函数不起作用{{1仍然是做你想做的事的唯一方法。

或者,如果我完全关闭,在新的JS代码中,我应该何时更喜欢箭头功能?什么时候应该更喜欢bind

2 个答案:

答案 0 :(得分:3)

我看到了两个优点:

部分申请:

bind方法可用于预先设置函数的参数;它允许你通过在调用之前传递一个参数来创建函数的子函数(不是字面意义,幕后,只有一个函数),这样你预设的这个参数将被用于bind返回的函数的所有调用。 @Charlie_H已经解释了这一点,但我也将提供一个例子:

function foo(bar, baz) {
return bar + baz;   
}

var sub_foo = foo.bind(Object.create(null), 20);

console.log(sub_foo(60));
console.log(sub_foo(120));

正如您在上面的示例中所看到的,bind方法允许我创建您可以称为foo的子函数,此函数将始终使用20第一个参数。

现在再说一遍,不要让我可怜的措辞误导你,bind实际上并没有创建新功能!在幕后,将使用原始函数,唯一的事情是bind将执行它的一些魔法,以便始终使用传递给bind的参数。我使用“子功能”这个词,因为它使整个事情更容易理解。



能够将目标函数的this绑定到您想要的任何对象:

使用fat-arrow函数时,fat-arrow函数的this将始终绑定到封闭范围的this;使用bind,您可以将目标函数的this绑定到您想要的任何对象:

function foo() {
return this.baz;
}

var bar = foo.bind({baz: "Hell yeah!"});

bar(); // "Hell yeah!"


此外,胖箭头函数的this绑定不可覆盖,这是一个细微的细节但仍然有用。


还有一件事我想补充一点,在“你不了解JS”一书中:这个&对象原型,Kyle Simpson说你不应该使用胖箭头函数来解决this复杂性,这会使JavaScript的this规则发生变化,因为它们的用法重新回到了var self = this模式这种模式的用法源于对JavaScript this行为缺乏了解。简短版本:他更喜欢bind。 我没有看到使用胖箭头功能的任何东西,IMO他们甚至使代码更具可读性,因为仅仅通过查看它们就可以看到开发人员正在尝试做什么以及他们如何使用它同时使用{{ 1}},你不知道开发人员正在尝试做什么以及他们为什么要这样做,直到你看到bind的第一个参数。我建议使用fat-arrow函数,你希望fat-arrow函数的bind绑定到当前作用域的this,并且当你想要它绑定到其他东西时thisbind


如果您不理解我的部分答案,请问我,我会在评论中详细说明。

答案 1 :(得分:2)

我看到了bind方法的一个额外优势,因为它可以部分应用。

function list() {
  return Array.prototype.slice.call(arguments);
}

var list1 = list(1, 2, 3); // [1, 2, 3]

// Create a function with a preset leading argument
var leadingThirtysevenList = list.bind(null, 37);

var list2 = leadingThirtysevenList(); 
// [37]

var list3 = leadingThirtysevenList(1, 2, 3);
// [37, 1, 2, 3]

(礼貌here

我认为箭头函数适用于速记语法很方便且执行上下文不应该是它自己的情况。

相关问题