javascript-关闭麻烦:将“事件”传递给命名函数
作者:互联网
我正在调试一些遇到一些关闭问题的Javascript-但似乎无法将“事件”参数传递给函数.
这是问题(简而言之):
// let's say links.length == 3
for(var i = 0; i < links.length; i++){
links[i].onclick = function(e){
alert(i); //closure! all links alert "3"
// do something with "e"
}
}
这是我的解决方案
//workaround
// define function outside of loop
function outer(e,i){
return function(){
alert(i); //closure! all links alert "3"
// do something with "e"
}
}
for(var i = 0; i < links.length; i++){
links[i].onclick = outer(e,i); //uh oh! e = undefined???
}
在我的解决方法中,我在循环外定义了一个函数以防止关闭-但我无法将“ e”参数传递给它.有人可以指出我正确的方向吗?
解决方法:
在返回的函数中定义它.
function outer(i){
// ------------v-- event object is passed when this function is invoked
return function( e ){
alert(i);
}
}
for(var i = 0; i < links.length; i++){
links[i].onclick = outer(i);
}
事件发生时会传递事件对象,因此需要将其定义为该函数的参数,该函数最终被分配为处理程序(您要从external()返回的函数).
标签:closures,javascript 来源: https://codeday.me/bug/20191102/1991296.html