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