[英]Apps script weird behavior about loop
當我在應用程序腳本上調試腳本時,我發現了一個奇怪的行為。 我不知道為什么var
和const
在應用程序腳本中表現不同。
代碼:
function myFunction() {
Logger.log('loop with var')
for(var i=0;i<3;i++){
var a=i%2
Logger.log(a)
}
Logger.log('loop with const')
for(var i=0;i<3;i++){
const b=i%2
Logger.log(b)
}
}
和輸出:
[18-10-07 19:03:57:377 HKT] Starting execution
[18-10-07 19:03:57:384 HKT] Logger.log([loop with var, []]) [0 seconds]
[18-10-07 19:03:57:385 HKT] Logger.log([0.0, []]) [0 seconds]
[18-10-07 19:03:57:386 HKT] Logger.log([1.0, []]) [0 seconds]
[18-10-07 19:03:57:386 HKT] Logger.log([0.0, []]) [0 seconds]
[18-10-07 19:03:57:387 HKT] Logger.log([loop with const, []]) [0 seconds]
[18-10-07 19:03:57:387 HKT] Logger.log([0.0, []]) [0 seconds]
[18-10-07 19:03:57:388 HKT] Logger.log([0.0, []]) [0 seconds]
[18-10-07 19:03:57:388 HKT] Logger.log([0.0, []]) [0 seconds]
[18-10-07 19:03:57:390 HKT] Execution succeeded [0.005 seconds total runtime]
我的預期結果是0 1 0
和0 1 0
。
盡管應用程序腳本似乎在塊范圍內處理 const,但實際上分配給它的第一個值是堅持的值,例如
for ( var i = 0 ; i < 5 ; i ++ ) {
const x = i;
}
x 將始終為 0。這是由於 JavaScript 模擬器 (rhino) 中的實現錯誤。
這里有一個完整的解釋http://ramblings.mcpher.com/Home/excelquirks/gassnips/constsandscopes
以及在這里對犀牛有效和無效的完整總結
http://ramblings.mcpher.com/Home/excelquirks/gassnips/rhinoversion
希望應用程序腳本 JavaScript 方言有一天會迎頭趕上,但與此同時,除了一次性使用分配之外,請避免使用 const。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.