为什么JavaScript bind()调用会反转函数的参数?

为什么JavaScript bind()调用会反转函数的参数?,javascript,Javascript,绑定到输入元素的oninput事件,如下所示: oninput: this.updateNote.bind(event, note) 其中note是一个简单对象({completed:bool,text:string}),event是InputEvent 我对updateNote的定义如下: updateNote(note, event) { ... } 我无法解释它的奇怪之处 updateNote的参数与bind()调用的顺序相反,但注意是正确的对象,事件是InputEvent。当您这样做

绑定到
输入
元素的oninput事件,如下所示:

oninput: this.updateNote.bind(event, note)
其中note是一个简单对象({completed:bool,text:string}),event是InputEvent

我对updateNote的定义如下:

updateNote(note, event) {
...
}
我无法解释它的奇怪之处

updateNote的参数与bind()调用的顺序相反,但注意是正确的对象,事件是InputEvent。

当您这样做时

this.updateNote.bind(event, note)   // (1)
您可以创建一个函数
boundFunc
,该函数接受任意数量的参数并调用
updateNote
,其中
等于
事件
变量恰好包含的任何参数,一个参数
注释
和传递给
boundFunc
的其余参数。所以基本上是:

event = whatever

function boundFunc(...args) {
    ...updateNote.this = whatever...
    updateNote(note, ...args)
}
现在,
onInput
需要一个函数并用一个参数调用它,
event
。由于此函数恰好是我们的
boundFunc
,因此其调用方式如下:

boundFunc(event)   // (2)
根据上面的说明,“updateNote”是这样调用的

updateNote(note, event)

这就解释了“颠倒”的事情。事实上,没有什么是相反的。第(2)行中的“事件”与您在
bind
第(1)行中使用的“事件”无关。只要你不在“updateNote”中使用
this
.bind
的第一个参数是新的
this
值,而不是pass的第一个参数,那么它可能会丢失。这是真的,而且你可能会误解
.bind()
的作用。传递给
.bind()
的值是调用绑定函数时要传递的实际值。简而言之,您不能使用
.bind()
来反转函数的参数顺序。如果您能解释一下您实际要完成的任务,这可能会有所帮助。我想确保updateNote()获得所有必需的信息,从而调用bind()。如果我只是将oninput属性设置为this.updateNote,我将无法同时获得note和InputEvent值。我知道bind的第一个参数设置了新的
this
值,但我想知道如何将其转换为updateNote,而不会出现参数反转的问题。