2015-10-20 97 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被定義爲一個函數的參數時......它只存在於該函數的作用域中。我是可選的,只需要在那裏,如果你想知道你在哪個迭代。