javascript - 在函数声明时而不是运行时使用变量的值?

标签 javascript jquery closures

这应该是一个非常简单的问题,我已经遇到过很多次了,应该有一个明显的解决方案,但我认为我很难正确表达它。

我正在 JS/jQuery 中运行一个循环,将函数绑定(bind)到某些元素的事件。由于元素是动态添加到页面的,我希望该函数包含对其将要修改的特定元素的引用。下面显示了一个简化的示例,以及我正在使用的解决方法代码。

for (row = 0; row < numOfRows; row++) {
    $('#row' + row + ' input').keyup(function () {
        alert($(this).parent().parent().get(0).id);    
    });
}

这里的问题是,为了获得对行的引用,而不是使用循环中使用的变量,我必须以冗长的方式从行的 ID 中提取引用(在上面的代码中) ,然后还有另一行从标识符中删除“行”,为清楚起见省略了。)

我想要的工作类似于:

for (row = 0; row < numOfRows; row++) {
    $('#row' + row + ' input').keyup(function () {
        alert(row);
    });
}

但是,这显然只返回最后一个要添加的元素的 ID。我确信有一种简单的方法可以只获取变量的值而不是对其的引用,但我只是还没有遇到过。有人可以帮忙吗?

最佳答案

for (var row = 0; row < numOfRows; row++) {
    (function(row) {
        $('#row' + row + ' input').keyup(function() {
            alert(row);
        });
    })(row);
}

这会创建一个新的闭包,并且由于该行作为函数参数传递,因此它与循环变量“分离”。

关于javascript - 在函数声明时而不是运行时使用变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5572347/

相关文章:

javascript - 如何让听者在手机屏幕上拉下或拉下时始终工作?

javascript - React Component div id 不会隐藏 map 循环中使用的内容

javascript - 添加类时的过渡

javascript - 闭包中变量引用的意外行为

Javascript 闭包和自动执行匿名函数

javascript - 如何在循环中创建一个闭包来捕获变量并在 Javascript 中获取参数?

javascript - 将 java 日期时间符号转换为 javascript 库日期时间符号

javascript - SQL生成的选择菜单,根据相关值更新文本框

javascript - jQuery Mobile 如何防止页面刷新时进入默认状态?

javascript - 使用多个延迟的 ajax 调用时获取正确的数据