我仍然在学习bind和arrow函数的来龙去脉。
现在看来,在我们过去使用bind的地方,我们应该使用箭头函数,尽管我还没有看到它是这样详细说明的。
因此,我想知道这是否是真的,或者有些情况下我们仍然应该使用bind,即使箭头函数可以工作,或者有些情况下箭头函数不能工作,而bind仍然是您想做的事情的唯一方法。
或者,如果我完全关闭了,在新的JS代码中,什么时候我应该选择箭头函数,什么时候我应该更喜欢bind
发布于 2017-09-24 20:00:18
我认为有两个优点:
部分应用:
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 绑定到您想要的任何对象的能力:
对于胖箭头函数,胖箭头函数的this将始终绑定到封闭作用域的this;使用bind,您可以将目标函数的this绑定到您想要的任何对象:
function foo() {
return this.baz;
}
var bar = foo.bind({baz: "Hell yeah!"});
bar(); // "Hell yeah!"此外,胖箭头函数的this绑定不是不可过的,这是一个微妙的细节,但仍然有用。
我还想补充一件事,在这本书中,你不知道JS: this & Object,凯尔辛普森说,你不应该使用胖箭头函数来绕过this的复杂性,这就扭曲了JavaScript的this规则,因为它们的使用根源于var self = this模式,而该模式的使用源于对JavaScript的this行为缺乏了解。简略版:他更喜欢bind。不过,我看不出使用胖箭头函数有什么用处,因为通过查看它们,您就可以看到开发人员正在尝试做什么,以及他们如何使用这些功能,同时,在使用bind时,您不知道开发人员到底想做什么,也不知道他们为什么要这样做,直到您查看bind的第一个论点。我推荐使用胖箭头函数的胖箭头函数,如果您希望它绑定到当前作用域的this,那么当您希望它绑定到其他东西时,就会发现bind。
如果你不理解我的部分答案,问我,我会尽量在评论中详细阐述。
发布于 2017-09-23 02:56:04
我看到了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](由这里提供)
我认为箭头函数适用于速记语法方便且执行上下文不应属于自己的情况。
https://stackoverflow.com/questions/46375475
复制相似问题