2013-10-30 50 views
0

我試圖檢查一個值是否被採用,如果它正在跳到下一個值。這是通過一個簡單的遞歸在遞歸函數中獲取「變量是未定義的返回代理」

function recur(id){ 
    if($('#'+id).length != 0){ // checking if id exists on page 
     recur(id++); 
    } 
    else{ 
     return id; 
    } 
} 

$.(document).ready(function(){ 
    var x = recur(1); 
    alert(x); 
}); 

做,但我得到這個錯誤:

x is undefined 
return proxy 
+0

爲什麼使用遞歸遍歷數組?使用'for' –

+0

我實際上檢查是否jQuery(#+'id')。length!= 0(即在頁面上,該id存在)。所以去下一個1。希望讓人們瞭解 – user2583714

+0

Downvoted。修復你的語法錯誤/錯別字。澄清問題。你的代碼輸出與你陳述的不一致。 –

回答

2

你缺少的遞歸調用return語句:

function recur (id){ 
    if($('#'+id).length != 0){ 
     return recur(id++); // add return here 
    } 
    else{ 
     return id; 
} 

沒有它,只有終止的情況下會返回一個值,但它不會被傳遞到堆棧。所以最上面的recur調用確實返回undefined

我個人不會用遞歸而是做迭代:

function nextId(id) { 
    while ($('#'+id).length != 0) { 
     ++id; 
    } 
    return id; 
} 
+0

你是我的神!謝謝 。已經把我的大腦趕出去了! – user2583714

+0

@ user2583714不客氣;) –

+1

請將答案標記爲已接受。 –