为何向bind绑定的函数传参时,参数对应原函数的第二个形参?
关于JavaScript中bind()方法参数传递的解释
先看你的代码:
let info = { fname: "John", lname: "Smith" } const print = function(city, country) { console.log( `I am ${this.fname} ${this.lname}. Living in ${city}, ${country}`) } const bound = print.bind(info, "California") bound('USA') //output: I am John Smith. Living in California, USA
bind()方法除了绑定this指向,还有个核心作用:提前给原函数传入部分参数,这些参数会作为原函数的「前置参数」,按顺序占据原函数的形参位置。
具体到你的代码场景:
- 调用
print.bind(info, "California")时,第一个参数info用来绑定this指向,第二个参数"California"直接被设定为原函数print的第一个形参city的值。 - 当你调用
bound('USA')时,传入的'USA'会被追加到bind时传入的参数后面,自动成为原函数print的第二个形参country的值。
简单总结:bind的参数列表里,除了第一个this绑定值,剩下的参数会按顺序「占住」原函数的前面几个形参位置,后续调用绑定后的函数时,传入的参数会接着往后填充剩余的形参。
内容的提问来源于stack exchange,提问作者JethroT
相关产品推荐
相关产品推荐

