2016-08-02 94 views
1

我經歷了一段代碼,並且這個匿名函數傳遞了索引和值的值作爲參數。這是如何有用的,因爲我們根本不是手動調用函數? (通過事件呼叫除外)。此外,該索引值(隨後在函數中使用)從哪裏發起?誰正在傳遞這個價值觀,他們從哪裏來?該函數如何獲取索引值?

var hideCode = function houdini() 
{ 
    var numRand = getRandom(4); 
    $(".guess_box").each(function(index, value) 
    { 
     if(numRand == index) 
     { 
      $(this).append("<span id='has_discount'></span>"); 
      return false; 
     } 
    }); 
} 
+2

http://api.jquery.com/jquery.each/ –

+2

'index'是'.guess_box'元件的第n個一次出現。這是經過DOM操作後每個jQuery的序列化。如果我們在DOM中有3個類爲'.guess_box'的元素,那麼每個方法都會循環索引1,2,3 ...... – dinesh

+0

@JaromandaX我已經從頭第一個Javascript中知道了JavaScript的基礎知識,但還沒有看到一個匿名函數被傳遞一個值之前。這就是我困惑的原因。根據提供的答案,每個()是一個jQuery函數,而不是一個JavaScript的,因此我對此的困惑是合理的。 –

回答

2

jQuery's docs

的。每個()方法被設計成使DOM循環結構簡潔 和不易出錯。當它被調用時,它遍歷作爲jQuery對象一部分的DOM元素 。每次回調運行時,都是 通過當前循環迭代,從0開始。更重要的是, 回調是在當前DOM元素的上下文中觸發的,所以 這個關鍵字this引用了元素。

這意味着是$('.guess_box')被稱爲它之後,.each(...)迭代返回的陣列上從0開始直到長度-1。這與在返回的數組上調用for循環非常相似。

下面的代碼片段展示了使用jQuery的.each()函數進行迭代的結果,與使用純Javascript和for循環的類似迭代相比較。

var showCode = function houdini() { 
 
    // Prints the results of each iteration so you can see what happens. 
 
    $(".guess_box").each(function(index, value) { 
 
    console.log($(this).text()); 
 
    }); 
 
    // In pure JS you would do something like this, which is very similar. 
 
    var boxes = document.getElementsByClassName('guess_box'); 
 
    for (var i = 0; i < boxes.length; i++) 
 
    console.log(boxes.item(i)); 
 
} 
 
$('#tester').click(function() { 
 
    showCode(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="guess_box">test 1</div> 
 
<div class="guess_box">test 2</div> 
 
<div class="guess_box">test 3</div> 
 
<div class="guess_box">test 4</div> 
 
<button id="tester">click me</button>

4

當寫:

$(".guess_box").each(function(index, value) 
    { $(".guess_box").each(function(index, value) 
     { 
      //do something 
     } 

通過在各功能拍下的索引參數是與指數0開始長度的迭代器 - 由jQuery選擇所選擇的項目的1。

參見 - http://api.jquery.com/jquery.each/