JavaScript传递参数问题

JavaScript传递参数问题,javascript,reference,Javascript,Reference,我有以下代码 for (var i = 0; i < that.$el.mini.length; i++) { var pag = that.$el.mini[i].pagination; // Mini-Slider Pagination $('li', pag).each( function(j, el) { $(el).click( function() {

我有以下代码

for (var i = 0; i < that.$el.mini.length; i++) {
            var pag = that.$el.mini[i].pagination;
            // Mini-Slider Pagination
            $('li', pag).each( function(j, el) {
                $(el).click( function() {
                    /*
                     * Toggle Mini-Slide
                     */
                    that.slider_fn.mini.show(i, j);
                    return false;
                });
            });
        }
for(var i=0;i
所以,基本上,我想做的是运行这个函数
that.slider\u fn.mini.show(I,j)

问题是我想使用变量
I
,它会更改循环中的值。单击元素时,
i
作为最新的数值,即
that.$el.mini.length


如何使JavaScript(或函数)记住该特定数字?

使用闭包关闭
I
的值:

$(el).click( (function(i_){
  return function() {
     that.slider_fn.mini.show(i_, j);
     return false;
  };
})(i));

之前,您的函数引用了名为
i
的变量,现在在每次迭代中,您都会创建一个引用
i
的新函数,该变量对于每个函数都是唯一的,并且在创建函数时引用了
i
的值。

使用闭包关闭
i
的值:

$(el).click( (function(i_){
  return function() {
     that.slider_fn.mini.show(i_, j);
     return false;
  };
})(i));

之前,您的函数引用了名为
i
的变量,现在在每次迭代中,您都会创建一个引用
i
的新函数,该变量对于每个函数都是唯一的,并且在创建函数时引用
i
的值。

您需要创建函数闭包,并将要作为参数持久化的变量传入,如下所示:

for (var i = 0; i < that.$el.mini.length; i++) {
    var pag = that.$el.mini[i].pagination;
    $('li', pag).each(function (j, el) {

        // function closure to persist i, j, and el
        (function (idx, jdx, elem) {
            $(elem).click(function () {
                that.slider_fn.mini.show(idx, jdx);
                return false;
            });
        } (i, j, el));

    });
}
for(var i=0;i
您需要创建一个函数闭包,并将要作为参数持久化的变量传入,如下所示:

for (var i = 0; i < that.$el.mini.length; i++) {
    var pag = that.$el.mini[i].pagination;
    $('li', pag).each(function (j, el) {

        // function closure to persist i, j, and el
        (function (idx, jdx, elem) {
            $(elem).click(function () {
                that.slider_fn.mini.show(idx, jdx);
                return false;
            });
        } (i, j, el));

    });
}
for(var i=0;i
这是假设pag是一个元素,并且您正在使用jquery

对于(var i=0;i
}这是假设pag是一个元素,并且您正在使用jquery

对于(var i=0;i

}/P>< P>给出的闭合答案是解决问题的常规方法,但是如果不关心自调用匿名函数,则可以考虑使用<代码>前述()/代码>:


警告:
forEach()
并非在所有浏览器中都实现。您可以看到如何修改它,如在

的“兼容性”下所描述的,给出的闭合答案是解决问题的常规方法,但是如果不关心自调用匿名函数,则可以考虑使用<代码>前述()/代码>:


警告:
forEach()
并非在所有浏览器中都实现。您可以看到如何调整垫片,如

的“兼容性”下所述,或者您也可以完成闭合,但我认为这更干净。更干净,从哪个角度看?数据函数向HTML页面添加大量信息。我有很多UL和LI。数据与元素一起存储,而不是每次要将数据与对象关联时都创建一个全新的匿名函数闭包。这不会向元素添加特定的信息,而是存储在jquery对象哈希中。但是您还是要创建函数吗?这完全是意见问题。如果您认为创建一个返回匿名函数的函数更简单,那么我个人认为它更难阅读。由于变量i的状态在另一个状态中,所以调试也比较困难。但说真的,它太小了,不管怎样……或者你也可以做闭包,但我认为这更干净。更干净,从哪个角度看?数据函数向HTML页面添加大量信息。我有很多UL和LI。数据与元素一起存储,而不是每次要将数据与对象关联时都创建一个全新的匿名函数闭包。这不会向元素添加特定的信息,而是存储在jquery对象哈希中。但是您还是要创建函数吗?这完全是意见问题。如果您认为创建一个返回匿名函数的函数更简单,那么我个人认为它更难阅读。由于变量i的状态在另一个状态中,所以调试也比较困难。但说真的,它太小了,不管怎样……谢谢。我已经知道应该实现一些与函数相关的东西,但是忘记了ClosureStanks。我已经知道应该实现一些与函数相关的东西,但是忘记了闭包