Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环作用域的Javascript接受最后一个变量_Javascript_Jquery - Fatal编程技术网

循环作用域的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);