[英]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.