JavaScript:具有回调和参数的事件侦听器
我有一个事件处理程序,它(a)需要参数,(b)通过JavaScript:具有回调和参数的事件侦听器,javascript,function,parameters,callback,event-listener,Javascript,Function,Parameters,Callback,Event Listener,我有一个事件处理程序,它(a)需要参数,(b)通过window.setTimeout调用回调函数。我使用bind来附加事件处理程序 被调用的函数是用附加参数调用的。我尝试了回调(参数)和`callback.call(这个,参数) 下面是一个代码示例: var element=document.querySelector('h1'); element.onclick=function(e) { delay(test.bind(element,'from original','also fr
window.setTimeout
调用回调函数。我使用bind
来附加事件处理程序
被调用的函数是用附加参数调用的。我尝试了回调(参数)
和`callback.call(这个,参数)
下面是一个代码示例:
var element=document.querySelector('h1');
element.onclick=function(e) {
delay(test.bind(element,'from original','also from original',e));
}
function test(a,b,c,d,e) {
alert(this); // element
alert(a); // from original
alert(b); // also from original
alert(c); // event
alert(d); // from delayed
alert(e); // also from delayed
}
function delay(callback) {
window.setTimeout(delayed,100);
function delayed() {
// callback.call(this,'from delayed','also from delayed');
callback('from delayed','also from delayed');
}
}
在我的测试中,我发现回调按以下顺序获取参数:
this
设置为原始元素,即使我使用.call
将this
参数设置为任何值(甚至null
)
我可以处理这种确定性,但我不清楚这是如何正式处理的。我在文档中找不到任何讨论带有回调的事件侦听器的内容
问题是:
这个
来自哪里,为什么它似乎忽略了任何改变ie的尝试通过
bind()
,您可以看到,谢谢您:
bind()方法创建一个新函数,在调用该函数时,将其this关键字设置为提供的值,并在调用新函数时在任何提供的参数之前提供给定的参数序列
所以这一行:test.bind(元素,'from original','alwayfrom original',e)
将返回一个函数,该函数在调用时将首先使用提供的参数,然后再使用这些参数。因此,在调用函数时,它将按照上面列出的顺序进行操作
至于
this
,问题在于绑定后您正在使用setTimeout()
,这就是您可能无法获得预期效果的原因。您可以阅读更多关于setTimeout()
和的信息,您可以通过bind()
看到:
bind()方法创建一个新函数,在调用该函数时,将其this关键字设置为提供的值,并在调用新函数时在任何提供的参数之前提供给定的参数序列
所以这一行:test.bind(元素,'from original','alwayfrom original',e)
将返回一个函数,该函数在调用时将首先使用提供的参数,然后再使用这些参数。因此,在调用函数时,它将按照上面列出的顺序进行操作
至于this
,问题在于绑定后您正在使用setTimeout()
,这就是您可能无法获得预期效果的原因。您可以阅读有关setTimeout()
和此
的更多信息