2011-11-11 52 views
1

我希望能夠在回調中傳遞參數,但是要從原始調用函數傳遞參數,並且符合下面的規定,例如,給定:在回調中傳遞參數

function foo() { 
    var p = 5; 
    getDataFromServer(callBackFunction); 
} 

function callBackFunction(data) { 
    // I need value of 'p' here 
    ... 
} 

function getDataFromServer(callback) { 
    // gets data from server 
    callback.call(); 
} 

美中不足的是,我不想改變功能getDataFromServer(),(即允許它接受另一個參數。)

這可能嗎?謝謝。

+0

如果你沒有提供任何參數,'.call'就沒用了。 – pimvdb

回答

2

是的,這是很好的瞭解。

function foo() { 
    var p = 5; 
    getDataFromServer(function(){ 
    callBackFunction(p) 
    }); 
} 
2

是的,你可以使用閉包來做到這一點。

但是,很難爲此提供代碼,因爲您的示例不明確。

我的猜測是,你想是這樣的:

function foo() { 
    var p = 5; 
    getDataFromServer(callBackFunction(p)); 
} 

function callBackFunction(p) { 
    var closureOverP = function(data) {... something with p ...}; 
    return closureOverP; 
} 
0

這絕對有可能,我會說功能性編程語言的良好做法。但是你調用該函數是這樣的:

function getDataFromServer(callback) { 
    // gets data from server 
    callback(); 
} 
+0

請注意,JavaScript更典型地被描述爲具有功能性能力的多範式或命令式/面嚮對象語言。 –

1

所以一個簡單的匿名函數不會做?

function foo() 
{ 
    var p = 5; 

    getDataFromServer(function() 
         { 
          callBackFunction(p); 
         }); 
}