2014-11-08 92 views
0

請參閱以下代碼片段。在內部Javascript回調函數中訪問父函數參數的正確方法

var exec = require('child_process').exec; 

var extraInfo = {'test':1,'passing':'test'}; 

runWithData(extraInfo); 

function runWithData(passedData) 
{ 
    exec('/Users/test/Desktop/testcommand', function callback(error,stdout,stderr) 
    { 
     if (error) 
     { 
      console.log("ERROR",stderr); 
     } 
     else 
     { 
      console.log(stdout); 
     } 
    }); 
} 

在exec的回調中,我希望能夠訪問passedData。是否正在訪問passedData直接執行此操作的正確方法,並且如果同時處理多個函數調用會覆蓋它,還是有辦法將信息附加到回調函數中,以便將它綁定到它?

+0

這將有助於:https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Closures – techfoobar 2014-11-08 06:41:03

+1

您可以直接訪問'passedData'。這是在回調中完全可以訪問的父範圍內。每個函數調用都會創建一個新的作用域,從而創建一組新的數據,因此多個函數調用不會混淆。 – jfriend00 2014-11-08 06:51:01

+0

謝謝,這是有道理的 – 2014-11-08 07:51:30

回答

1

從@ jfriend00:

您可以直接訪問 'passedData' 直接。它位於母公司範圍 ,您可以在回調中完全訪問它。每個函數 調用創建一個新的範圍,從而創建一個新的數據集,從而 多個函數調用不要搞砸了

參見:MDN Closures

[注:標記社區維基,因爲這主要來自他人的評論等,對此我沒有要求積分。隨意編輯和改進]