循环作用域的Javascript接受最后一个变量
这项工作:循环作用域的Javascript接受最后一个变量,javascript,jquery,Javascript,Jquery,这项工作: var toggler = function(most){ var open = $('#toggle_' + most + ' .minus').is(':visible'); if(open){ $('#toggle_' + most + ' .minus').hide(); $('#toggle_' + most + ' .plus').show(); }else{ $('#toggle_' + most + '
var toggler = function(most){
var open = $('#toggle_' + most + ' .minus').is(':visible');
if(open){
$('#toggle_' + most + ' .minus').hide();
$('#toggle_' + most + ' .plus').show();
}else{
$('#toggle_' + most + ' .plus').hide();
$('#toggle_' + most + ' .minus').show();
}
$('#' + most + ' ol.tlist').toggle(open);
};
$('#toggle_mostviewed').click(function(){ toggler('mostviewed'); });
$('#toggle_mostshared').click(function(){ toggler('mostshared'); });
$('#toggle_mostrecent').click(function(){ toggler('mostrecent'); });
但这并不是:
var toggler = function(most){
var open = $('#toggle_' + most + ' .minus').is(':visible');
if(open){
$('#toggle_' + most + ' .minus').hide();
$('#toggle_' + most + ' .plus').show();
}else{
$('#toggle_' + most + ' .plus').hide();
$('#toggle_' + most + ' .minus').show();
}
$('#' + most + ' ol.tlist').toggle(open);
};
var t = ['mostviewed','mostshared','mostrecent'];
for(var i = 0 ; i < t.length; i++ ){
var j = t[i];
$('#toggle_' + j).click(function(){ toggler(j) });
}
i、 e.最后一次迭代是唯一重要的。这是因为错误地使用了 在本例中,由于您正在迭代数组,因此可以使用 你说:
$('#toggle'+most)。单击(function(){toggler(most)})代码>
但我想这就是你的意思:
$('#toggle'+j)。单击(function(){toggler(j)})代码>
(您定义了j
,但后来改用了most
。为什么不执行以下操作:
$('#toggle_mostviewed, #toggle_mostshared, #toggle_mostrecent').click(function({
toggler((this.id).split("_").pop());
});
或者更好的方法是,给他们一个类“toggle”(并将ID保留在html中),然后:
$('.toggle').click(function({
toggler((this.id).split("_").pop());
});
您的循环构造不正确。如果要在循环中设置变量以访问数组或对象的元素,以下是正确的语法:
var test = [];
for(var i = 0; i < test.length; test++)
(function(index){
// do cool stuff with test[index]
})(i);
var测试=[];
对于(变量i=0;i
这将在变量i上创建一个闭包。如果您不熟悉语法,则会发生以下情况:
1) 我们定义了一个闭包(for语句后面的open())
2) 我们定义了一个匿名函数来获取索引参数
3) 我们用最后一组()将索引传递到闭包中(即执行函数)
这三个步骤适用于循环的每次迭代。如果不使用闭包捕获索引值,那么当实际进行数组访问时,本例中的索引将过多+1,并在运行时导致错误
干杯结束问题。谷歌闭环。需要在匿名函数中封装循环逻辑。也是一个变量。与其他一些语言不同,循环块在javascript中没有作用域。你认为var j不可能是多谢的复制品,这是我一直在寻找的答案,还有其他方法处理这个案子吗?
$('.toggle').click(function({
toggler((this.id).split("_").pop());
});
var test = [];
for(var i = 0; i < test.length; test++)
(function(index){
// do cool stuff with test[index]
})(i);