2016-08-24 36 views
-1

雖然這個工程,並打印我從0到9如何JS綁定到外部科爾多瓦回調函數

for (var i=0; i < 10; i++ { 

    function myFunction (callback) { 
     setTimeout(function() { 
      callback('Answering your phone call'); 
     }, 10000); 
    } 

    myFunction(function (message) { 
     console.log("i = " + this.i + " , message = " + message); 
    }.bind({i: i})); 
} 

這不起作用,並打印我的10,10,10,10 ... (10次)

for (var i=0; i < 10; i++ { 

    // There is an externalFunction, which is a Cordova call, that does call the callBack function with a message. 

    externalFunction(function (message) { 
     console.log("i = " + this.i + " , message = " + message); 
    }.bind({i: i})); 
} 

我在做什麼錯? 我無法控制externalFunction,並且我想在callBack返回時保留call#。

我已經嘗試過各種版本的閉包,並且綁定並且無法讓它工作。

+0

可能重複[JavaScript閉合內循環 - 簡單實用示例](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Hamms

+0

@Hamms他沒有使用關閉變量,他正在使用對象屬性。 – Barmar

+0

第一個只顯示0-9,因爲循環終止於i <10因此'i'永遠不會等於10 –

回答

0

@Niles正確回答並用他的代碼筆演示了該外部函數實際上保留了綁定值。

但是,經過小時的調試後,得知Cordova層在創建單獨的運行時會話時會覆蓋「this」值,並且最終調用回調函數,則使用的值就是當前的值。