2015-10-20 35 views
-1

我正在学习js/jquery,并在做this练习,按字母顺序排列选择选项。这是解决他们给:试图了解.each()回调,排序选择选项

<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回调函数涉及到$('#target option').each(function(i)i参数?

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

  • 什么是i参数在做$.each(keys, function(i, key)?我只看到该函数中使用的关键字。从这里删除i确实会中断程序。

回答

0
  • 不,他们是独立的,就像name这里是分开:

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

    他们是独立的功能,每个只有自己的范围内定义的参数。

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

  • $.each回调中的第一个参数将收到该项目的索引(或键)(0,1,2,...);第二,价值。 (这有点令人困惑,因为这里的值被称为“键”)。如果删除第一个参数,则第二个参数变成第一个,并且您的变量现在将得到值0,1,2 ....被汇入i之前。

+0

啊好吧。我显然不明白回调是什么。目前为止只看到了“forEach”。为了澄清,顺序对于回调中的参数而言非常重要,而不是它们被称为什么? – unident77

+0

回调函数是正常函数 - 我们只是称它们为回调函数,因为它们是从另一个函数回调的。因此,你已经知道的有关参数如何与函数调用一起工作的所有信息都可以与回调一起使用。所以'function square(b){return b * b; }'和'function square(x){return x * x; }'完全等效 - 与回调函数相同。 – Amadan

0

我指的是.each调用的当前迭代。当一个var被定义为一个函数的参数时......它只存在于该函数的作用域中。我是可选的,只需要在那里,如果你想知道你在哪个迭代。