首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript 異步回調中全局變量 undefined:事件循環與閉包陷阱

     編輯:程式設計綜合問答

現象

$.getJSON 回調中賦值 `movie = data.movie`,隨後同步代碼讀取 `movie` 為 `undefined`;`alert(movie)` 後卻有值。

原因

**異步非阻塞**:`$.getJSON` 發起請求後立即返回,主線程繼續執行 `mappic(); tb_yx(movie);`,此時回調**尚未執行**,`movie` 仍為初始 `undefined`。`alert` 阻塞主線程,給了事件循環處理微任務/宏任務的時間,回調執行完成,`movie` 被賦值。

修正:將後續邏輯放入回調/Promise

$.getJSON(url, function(data) {
    movie = data.movie;
    mappic();
    tb_yx(movie); // 這裡 movie 已有值
});
// 或用 Promise
$.getJSON(url).then(data => {
    movie = data.movie;
    return mappic(); // 如果返回 Promise
}).then(() => tb_yx(movie));
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved