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

Trying to understand .each() callback that sorts select options

本文关键字:排序 each 回调 选项 选择      更新时间:2023-09-26

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

<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>
  • $.each 的回调函数中的 i 参数是否与 $('#target option').each(function(i) 中的i参数相关?

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

  • i参数在$.each(keys, function(i, key)中做什么?我只看到函数中使用的键。从此处删除i确实会破坏程序。

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

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

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

  • 删除i不会破坏任何东西,因为它从未被使用过。JavaScript 不会检查你传递了多少参数。如果传递的次数超过函数接受的次数,则会忽略额外的内容;如果您传递较少,则缺少的将被赋予值 undefined .

  • $.each回调中的第一个参数将接收项的索引(或键((0, 1, 2, ...(;第二个参数是值。(这有点令人困惑,因为这里的值称为"键"。如果删除第一个参数,则第二个参数将成为第一个参数,并且keys变量现在将获得值 0、1、2...。之前被输送到i中。

i 是指 .each 调用的当前迭代。当 var 被定义为函数的参数时...如果该函数,它仅存在于作用域中。i 是可选的,只有当您想知道您正在使用什么迭代时才需要在那里。