簡體   English   中英

JavaScript 閉包和作用域:如何將外部作用域變量傳遞給作為參數傳遞的回調函數?

[英]JavaScript closures and scoping: How to pass an outer scope variable to a callback function which is passed as an argument?

我的代碼是這樣的:

im.size((function(a, b) {
  console.log(b);
  console.log(im);
})(im));

對象 im 有一個函數大小,它需要一個回調函數。 它將參數 a 和 b 傳遞給回調函數。 但是,我需要讓對象 im 在回調中可用。 因此,我從外部將它作為參數傳遞,但是這“覆蓋”了傳遞給回調的參數 a 和 b。

輸出是:

 undefined [My Object]

如果我做:

im.size(function(a, b) {
  console.log(b);
  console.log(im);
});

輸出是:

 17 [My object] // edited: was undefined before

如何傳遞 im 對象以在回調范圍內可用以及獲取傳遞給回調的變量? 一點解釋也很好。

編輯:實際上在我的回調示例中可以訪問外部范圍。 對於異步回調也是如此,為什么可以通過這種方式訪問​​外部作用域?

第二個示例也應該有效,因為 im 在該范圍內定義(從第一個示例中推導出來)。

如果在定義函數的范圍內可以訪問變量,則它也可以在該函數內訪問。 你可以做im.size(im); im傳遞給 size (例如),因此如果您執行im.size(function() {}) ,則該函數也可以訪問 im 。

對於異步回調也是如此嗎?

是的。

為什么可以通過這種方式訪問​​外部作用域?

這就是它的工作原理 - 它在詞法范圍內,所以它是可訪問的。 其他語言要求您明確說明要關閉哪些變量,而 JS 則不需要。

暫無
暫無

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

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