编程语言
首页 > 编程语言> > javascript-在for循环内时,jQuery分配失败

javascript-在for循环内时,jQuery分配失败

作者:互联网

我有一个jQuery,当我这样做时,它可以正常工作:

var slide = [];
slide[1] = 
    {
        hide: function() {
            $("#slide-1").hide();
        },
        show: function() {
            $("#slide-1").show(2000);
        }
    };
slide[1].show(); <<< works fine

但是,如果我在循环中尝试失败:

for (var i=1; i <= totalSlides; i++) {
  slide[i] = 
    {
        hide: function() {
            $("#slide-" + i).hide();
        },
        show: function() {
            $("#slide-" + i).show(2000);
        }
    };
};
slide[1].show();  << unassigned

任何想法?

解决方法:

好吧,您是说它是“未分配”的,但是我猜该功能只是没有按照您的要求做.

这是一个普遍的问题.您在循环中创建的所有函数都引用相同的i变量.这意味着当函数运行时,它将获得循环完成后剩余的i的值.

您需要在新的变量环境中确定函数引用的变量范围,以保留循环中的值.为此,您需要调用一个函数,并使该函数引用当前的i值.

像这样:

function generate_functions( j ) {
     //    v----- DO NOT place the opening brace on the next line, after the
    return {              // return statement, or your code will break!!!
        hide: function() {
            $("#slide-" + j).hide();
        },
        show: function() {
            $("#slide-" + j).show(2000);
        }
    };
}

var slide = [];

for (var i=1; i <= totalSlides; i++) {

    slide[i] = generate_functions( i );

};

slide[1].show(); // should work

我创建了一个称为generate_functions()的函数,并在每次迭代中调用它,并将i作为参数传递.

您会注意到,generate_functions()将该值作为j参数接收.您也可以将其称为i,但是更改名称会使IMO更加清晰.

因此,现在您的函数正在引用本地j.因为每次调用generate_functions()都会创建一个新的变量环境,所以您创建的内部函数将引用该特定变量环境的j值.

因此,generate_functions()返回包含在每个新变量环境中创建的函数的对象,并将该对象分配给slide [i].

标签:unassigned-variable,for-loop,javascript,jquery
来源: https://codeday.me/bug/20191207/2087204.html