2011-07-28 88 views
0

我在一個範圍內得到這個功能:如何讓變量進入javascript函數?

AjaxState.prototype.run_on_finish = function(callback){ 
    if (this.isRunning()){ 
     setTimeout('AjaxState.obj().run_on_finish('+callback+')', 250); 
    }else{ 
     callback(); 
    } 
} 

我只是檢查是否所有的Ajax已經完成,再經過我調用回調(如果所有的Ajax結束)... ,但在其他時候,我嘗試使用如下函數調用:

// .obj()只是調用單例模式。

function foo(){ 
var id = 2; 
AjaxState.obj().run_on_finish(function(){ 
    makeThings(id); 
}); 
}(); 

當我執行此,我收到「ID沒有定義」,因爲我認爲「run_on_finish」只是看它在全球範圍內,如果我從ID刪除「變種」,它的工作原理味精..但我不想讓它成爲全球性的,我想通過這個功能發送它,這有可能嗎?

+0

爆笑問題的標題':)' –

+0

整個'run_on_finish'事情是沒有意義的。爲什麼你不使用基於事件的回調,即掛鉤'readystatechange'事件? – Tomalak

+1

您的示例必須不完整。提供真實的代碼。在你給出的例子中,'id'被有效地關閉到'run_on_finish'回調中。 – katspaugh

回答

0

試試這個:

function foo() { 
var id = 2; 
    AjaxState.obj().run_on_finish(
     (function(id) { 
     var sub_id = id; 
     return function() { 
      makeThings(id); 
     }; 
     })(id)); 
} 

http://jsfiddle.net/thomas4g/cGCBh/6/

+0

這種額外封閉的目的是什麼? – katspaugh

+0

@katspaugh從父函數foo中獲取id到傳遞給'run_on_finish'的函數中。我做錯了嗎? –

+0

是的,它是多餘的。 – katspaugh