簡體   English   中英

如何將變量傳遞給閉包

[英]How to pass a variable to a closure

我正在使用Decarta JS API PIN事件處理程序

我在地圖上顯示圖釘,並且正確觸發了每個圖釘的click事件。 當我嘗試將pin ID傳遞給處理程序時,麻煩就來了。 無論單擊哪個引腳,它始終顯示最后加載的ID。 我用於聲明偵聽器的代碼是:

for (var idx = 0; idx < jsonObjects.devices.length; idx++) {
    var device = jsonObjects.devices[idx]
    deCarta.Core.EventManager.listen('click', function() {home.pinPushed(device.id);}, device.pin);
}

這是通過循環遍歷我要顯示的所有位置來完成的。 它們在各自的坐標處正確顯示,記錄上一行清楚地表明,每個銷都已聲明了正確的ID。 但是,每當我單擊圖釘時,聲明的LAST ID就是傳遞給處理程序的唯一ID:

home.pinPushed(device.id)

單擊大頭針時,如何使每個大頭針傳遞唯一的ID?

嘗試這個 :

deCarta.Core.EventManager.listen('click', 
 (function(id) { return  function (){home.pinPushed(id);}})(device.id), device.pin);

美化版本:

 deCarta.Core.EventManager.listen('click', (function (id)
 {
     return function ()
     {
         home.pinPushed(id); //<---- id here is the closured variable
     }
 })(device.id), device.pin);

說明:

Js具有函數作用域 (而不是大括號({})范圍。)

您的for循環創建任何作用域/函數。

我正在做的是為每次迭代創建執行上下文。

對於每次迭代,im將當前device.id發送給一個函數,該函數又返回另一個函數,該函數關閉了變量。

暫無
暫無

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

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