2013-01-10 29 views
6

我知道與核心JavaScript,我們可以做這樣的事情:利用休息,繼續在jQuery的

for(i=1;i<10;i++){ 
    if(i==5){ 
    //break or continue 
    } 
} 

但爲什麼這是不正確的?

$.each(iteratorarray,function(i){ //iteratorarray - just an array 
    if(i==5){ 
    //break or continue,will cause error here 
    } 
}); 
+0

你看過[文檔](http://api.jquery.com/each/)嗎? – Bergi

+0

這只是第一個核心JavaScript,這是一個正常的功能。 – Esailija

回答

8

這個的行爲是由jQuery實現的。這就是jQuery api文檔所說的「我們可以在特定的迭代中通過break $ .each()循環使回調函數返回false。返回non-false與for循環中的continue語句相同;它將立即跳到下一次迭代「,你可以閱讀關於它here

3

return will continue,return false will break。 documentation談到break替代的例子,但它仍然指定.each回調中return的功能。

+0

感謝man + 1ed的努力! – coolguy

1

$.each的情況下,沒有可以擺脫的循環,這就是爲什麼你會得到錯誤。然而,jQuery的做法是,如果函數返回false,則返回breaks

+0

感謝man + 1ed的努力! – coolguy

1

您還可以使用JavaScript的every方法迭代數組元素。

的每個方法調用callbackfn功能的一個時間對於每個陣列元素 ,以升序索引順序,直到callbackfn功能 返回false。如果找到一個導致callbackfn返回false的元素爲 ,則每個方法立即返回false。否則,每個方法都會返回true。

+0

感謝man + 1ed的努力! – coolguy

2

爲什麼這是不正確的?

breakcontinue聲明僅適用作爲的一部分(換,換IN-,while-,...)loop statement。你不能在一個普通的函數中做到這一點。從規格:

的程序被認爲是如果[...] 程序包含繼續/ break語句語法不正確[...]直接或間接(但不跨越函數邊界),一個IterationStatement內。

而是,您可以從函數return(它打破函數體的進一步執行)。正如你可以在the documentation中看到的那樣,返回false停止在$.each中的迭代。

+0

break可以通過'return false'來實現'continue'如何' – coolguy

+0

只是''返回'從函數體過早。 – Bergi

+0

感謝man + 1ed的努力! – coolguy

2

$.each使用回調來執行自定義代碼,break是一個控制語句,可以中斷包裝循環。 breakcontinue必須直接從loop正文中調用,而不是從委託函數中調用。

$.each(iteratorarray,function(i){ //iteratorarray - just an array 
    if(i==5){ 
    //break or continue,will cause error here 
    } 
}); 

可視爲等於

for(i=0;i<iteratorarray.length;i++){ 
    if(callback(i, iteratorarray[i]) === false){ 
     break; 
    } 
} 

這裏你的代碼是駐留在callback()函數內,因此不能使用回調裏面loop control語句。

你可以在documentation瞭解更多。

+0

感謝man + 1ed的努力! – coolguy