2012-07-21 128 views
0

我已經創建,創建一個會話ID是否可以使用外部變量從另一個函數調用函數?

sessionId = ot.create_session(location, function(sessionId){ 
    console.log('The session ID is: ' + sessionId + '++++++++'); 
    return sessionId; 
}); 

我可以從函數內打印出會話ID的功能,但不能從功能的外部訪問它。


做不到這一點,我想調用一個函數,變量傳遞給函數

sessionId = ot.create_session(location, function(sessionId){ 
    console.log('The session ID is: ' + sessionId + '++++++++'); 
    sendToUser(sessionId); 
}); 

不過,我需要sendToUser有更多的數據,稱已聲明變量數據

因此我會做

sessionId = ot.create_session(location, function(sessionId){ 
    console.log('The session ID is: ' + sessionId + '++++++++'); 
    sendToUser(sessionId); 
}); 

sendTo User(sessionId, data){ 
} 

然而,這並不工作,無論是

整個代碼爲:http://pastebin.com/CdV3rdh0

+0

只需在回調中調用'sendToUser(sessionId,data);'。 – 2012-07-21 02:58:35

回答

1

下面的代碼片段:

setTimeout(function() { 
    console.log("I'm first! Am I?"); // #2 
}, 0); 

console.log("Hahah, I'm first!"); // #1 

將在第一「HAHAH,我是第一次登錄! 「然後「我是第一個!是嗎?」到控制檯。爲什麼?

JavaScript解釋器在執行任何其他操作(例如零秒後執行回調函數)之前,先從上到下運行任何函數。這是因爲javascript中的函數通常是非阻塞的,IO是異步完成的。這意味着,setTimeout不會等到第一個參數被執行時獲得的匿名函數,而是僅在零秒內註冊要執行的函數回調。它在解釋器到達文件結尾後立即執行。

由於ot.create_session需要將文件寫入磁盤以創建會話,因此sessionId僅在回調函數內部可用,並且永遠不會將sessionId取出,因爲當調用回調函數時,外部函數已經完成執行並且整個上下文已經消失:)

爲什麼你需要來自回調函數外部的會話ID呢? sendToUser的第二個參數data似乎也可以在回調函數中使用。只需編寫sendToUser(sessionId, data)

+0

好的...所以這是一個facepalm時刻 - 感謝啓蒙 – 2012-07-21 03:42:44

相關問題