簡體   English   中英

應用程序腳本有關循環的奇怪行為

[英]Apps script weird behavior about loop

當我在應用程序腳本上調試腳本時,我發現了一個奇怪的行為。 我不知道為什么varconst在應用程序腳本中表現不同。

代碼:

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 00 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM