簡體   English   中英

如何將 socket.on 中函數的值保存到全局變量?

[英]How to save value from a function inside socket.on to a global variable?

這可能很簡單,但我對用 Javascript 編程和使用 Socket IO 還很陌生。

當我想從函數內部給全局變量一個值時,過程相當簡單:

var j;

function a(){
j=2;

}
a();
//j is now 2

我現在的問題是,我有一個名為 socket.on 的方法,其中有一個函數,如下所示:

var j;

socket.on('news', function (p) {
j=p; 
//in here, j is equal to p
});
//in here, j is NOT p, it is undefined.

現在,在這種情況下,我希望我的全局變量 j 具有 p 的值,但是當我在函數外打印 j 時,它是未定義的。 我認為這是因為我需要像a();這樣a();東西a(); 在第一個示例中的函數之外。 在這種情況下我該怎么做?

非常感謝。

socket.on的第二個參數是所謂的回調函數,這是 JavaScript 中非常常見的模式。 在您的示例中,您正在收聽 'new' 事件。 當此事件發生時,將使用參數p觸發回調。 當然,這個參數只在回調函數本身內部可用。

需要明確的是:您沒有直接調用第二個示例中的函數。 一旦“新聞”事件發生,它就會被調用。

回調模式非常方便,因為它允許您編寫非阻塞代碼。 在等待 'news' 事件發生時, socket.on調用之后的任何代碼都在正常執行。 這就是你不能在回調之外訪問p的原因:你不知道回調將在什么時間點被調用。

我想你閱讀了更多關於 Javascript 的 事件循環函數及其作用域的內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM