2013-03-10 158 views
0

我發現了很多關於循環內調用函數的信息,但我還沒有發現任何涉及Google Apps腳本的信息。我已經通過了幾個教程,並基於此代碼:http://tobyho.com/2011/11/02/callbacks-in-loops/在Google Apps腳本中調用for循環中的函數

我的真實腳本從Fusion Table中提取數據並將其放入Google文檔中。我試圖用實際名稱替換一些Fusion Table數值數據,但我需要一個函數在循環內部運行才能工作。這是一個簡化的場景,它給了我相同的問題。

var big = []; 
    var data = [["fname1", "lname1", 2, 1980],["fname2", "lname2", 3, 1989]]; 

    function loop() { 
     for(i in data) { 
     Logger.log(big[i] = changeData(data[i][2])); 
    } 
    } 

    function changeData(n) { 
     return function() { 
     Logger.log(n + "this worked"); 
     }; 
    } 

當我檢查日誌我得到這個兩次:函數(){Logger.log(N + 「這個工作」);}

而不是執行功能,它只是返回的文本。我對JavaScript和Google Apps腳本非常陌生。這是一個GAS問題還是我的代碼路?任何幫助表示讚賞。

謝謝。

+0

這是預期的行爲的結果。刪除'返回功能(){...' – Jonathon 2013-03-11 03:37:39

回答

1

您所擁有的changeData函數是聲明一個函數並返回新函數。

你只需要返回changeData功能

function changeData(n) {  
    Logger.log(n + "this worked"); 
    return "changed data result"; 
} 
+0

感謝您的幫助。當我這樣做時,changeData Log工作,但來自循環函數的Log返回'undefined'。這就是我在功能解決方案中尋找功能的原因。以下是GAS腳本:[link](https://script.google.com/d/1eAW3BTV1ElkyMndP3OOxp2UdOMCMzUTroZxWq9IYQRSeDK8qi1hutoDr/edit)。也許我錯過了一些東西。 – user1959393 2013-03-11 00:31:00

+0

循環運行後,你的'big'數組中有什麼? – kevmc 2013-03-11 00:43:34

+0

剛剛檢查了你的GAS鏈接,你沒有從你的changeData函數返回任何東西,試試 'function changeData(n){ return n +「this worked」; }' – kevmc 2013-03-11 00:50:08

相關問題