我正在嘗試使用閉包來加速我在Google腳本中的腳本代碼。這個概念對我來說是新的,但我想知道是否在下面的代碼中正確應用了閉包。 (代碼有效)這封閉是否正確,我的推理中是否存在任何錯誤
背景:代碼是計算一個月的百分比進展情況。
我不希望現在和月份的變量在每次調用該函數時都會更新,但只有在文檔打開後纔會更新。我基本上想要的是所有變量都只設置一次,如果函數被多次調用,該函數將提供一個答案。
這是一個很好的理由使用閉包,我是否正確使用它?
感謝您的建議和耐心。
// calculate progress with second precision
var progressCalc = (function() {
const stMonth = SpreadsheetApp.getActive()
.getRangeByName("pStartdate")
.getValue();
const eoMonth = SpreadsheetApp.getActive()
.getRangeByName("pEndOfMonthDate")
.getValue();
const now = new Date();
var unixProgressEoMonth = unixTime(eoMonth)-unixTime(stMonth)
var unixProgressNow = unixTime(now)-unixTime(stMonth)
return function() { return unixProgressNow/unixProgressEoMonth;};
})();
function progress() {
Logger.log(progressCalc());
return progressCalc();
}
「*我正在嘗試使用閉包來加速我的腳本代碼*」 - 咦?請注意,您的返回函數(閉包)將始終返回相同的值,因此執行多次或重複除法沒有意義。你可以將結果值本身存儲在一個全局'progressVal'變量中,不需要'progressCalc'。 – Bergi
我不知道我明白你的意思。你能舉一個快速的例子,我可以看看它嗎? – Christoph
如果您能夠告訴/顯示我們在哪裏(多頻繁)調用「進度」或「progressCalc」,並且您的原始代碼沒有關閉看起來像是這樣,以便我們可以判斷加速和您是否應用了模式正確。 – Bergi