编程语言
首页 > 编程语言> > javascript-关闭麻烦:将“事件”传递给命名函数

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