试图理解对所选选项进行排序的.each()回调

时间:2015-10-20 00:57:38

标签: javascript jquery

我正在学习js / jquery并正在进行this练习,按字母顺序排序选择选项。这是他们给出的解决方案:

<div id="target">
    <select>
        <option val="a">aaa</option>
        <option val="c">ccc</option>
        <option val="d">ddd</option>
        <option val="b">bbb</option>
    </select>
</div>

<script>
    var options = {};

    $('#target option').each(function(i){
        var option = $(this);
        options[option.text()] = option;
    });

    var keys = Object.keys(options).sort();

    var select = $('#target select').empty();

    $.each(keys, function(i, key){
      select.append(options[key]);
    });
</script>
  • i的回调函数中的$.each参数是否与i中的$('#target option').each(function(i)参数相关?

  • 如果是这样,为什么从$('#target option').each(function(i)删除参数不会破坏任何内容?

  • i中执行的$.each(keys, function(i, key)参数是什么?我只看到函数中使用的键。从此处删除i会导致程序中断。

2 个答案:

答案 0 :(得分:0)

  • 不,它们是分开的,就像name这里是分开的一样:

    function sayHi(name) {
      alert("Hi, " + name);
    }
    function openWindow(url, name) {
      window.open(url, name);
    }
    

    它们是单独的函数,每个函数只在自己的范围内定义参数。

  • 删除i不会破坏任何内容,因为它从未使用过。 JavaScript不会检查您传递的参数数量。如果传递的函数超过函数接受的范围,则会忽略其他内容;如果你传递的更少,那么缺失的那些将被赋予值undefined

  • $.each回调中的第一个参数将接收项目的索引(或键)(0,1,2,...);第二,价值。 (这有点令人困惑,因为这里的值被称为&#34;键&#34;。)如果删除第一个参数,第二个参数将成为第一个参数,您的keys变量现在将获得值0 ,1,2 ......之前已经流入i

答案 1 :(得分:0)

i指的是.each调用的当前迭代。当var被定义为函数的参数时......它只存在于该函数的范围内。 i是可选的,只有你想知道你在哪个迭代时才需要在那里。