Javascript for loop 作用域采用最后一个变量
Javascript for loop scope takes last variable
这有效:
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) });
}
就像 for 循环被"替换"为:
$('#toggle_mostrecent').click(function(){ toggler('mostrecent'); });
即最后一次迭代是唯一重要的。
您的循环构造不正确。如果要在循环中设置变量以访问数组或对象的元素,这是正确的语法:
var test = [];
for(var i = 0; i < test.length; test++)
(function(index){
// do cool stuff with test[index]
})(i);
这会在变量 i 上创建一个闭包。如果您不熟悉语法,请执行以下操作:
1)我们定义一个闭包(for语句后面的开头())
2)我们定义一个匿名函数来获取索引参数
3)我们将索引传递到闭包中(即我们执行函数),最后一组()的。
这三个步骤发生在循环的每次迭代中。如果不使用闭包来捕获索引值,则在实际进行数组访问时,此示例中的索引将过多 +1,并在运行时导致错误。
干杯
这是因为在循环中错误地使用了闭包变量
在这种情况下,由于您正在遍历数组,因此可以使用 $.each()
var t = ['mostviewed','mostshared','mostrecent'];
$.each(t, function(_,most){
$('#toggle_' + most).click(function(){ toggler(most) });
})
你说:
$('#toggle_' + most).click(function(){ toggler(most) });
但我认为这就是你的意思:
$('#toggle_' + j).click(function(){ toggler(j) });
(您定义了j
但后来改用了most
)。
为什么不做这样的事情:
$('#toggle_mostviewed, #toggle_mostshared, #toggle_mostrecent').click(function({
toggler((this.id).split("_").pop());
});
或者更好的是,给他们一个类"切换"(并将ID留在html中),然后:
$('.toggle').click(function({
toggler((this.id).split("_").pop());
});
相关文章:
- 表追加而不附加最后一个元素
- 无法在Ionic select中预先选择最后一个选项
- 导航到特定事件的另一个变量页面
- 我可以在Javascript/jQuery中使用一个变量作为键吗
- 使用mongodb更新中的一个变量
- 为什么画布形状只在3个画布中的最后一个画布上渲染
- 将节点数据分配给另一个变量jstree
- 如何替换字符串中最后一个出现的变量
- 表读取最后一个变量
- Javascript for loop 作用域采用最后一个变量
- 从本地存储中获取最后一个变量(按时间)
- 当 DOM 更改时,使用最后一个选择器更新变量
- JS将对象推送到变量,将最后一个对象添加到所有元素中
- Jquery each():回调中的变量总是最后一个值
- Javascript变量修改后的最后一个值
- 我如何得到最后2个数字从一个url到一个变量使用javascript
- 如何从JavaScript变量中删除第一个和最后一个双引号
- 数组中.在for循环javascript中只推入最后一个变量
- 全局变量只返回循环中最后一个实例的值
- 变量设置为Javascript for循环中的最后一个值