Apps脚本关于循环的怪异行为

时间:2018-10-07 11:09:13

标签: javascript google-apps-script

当我在应用程序脚本上调试脚本时,发现了一个奇怪的行为。 我不知道为什么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

1 个答案:

答案 0 :(得分:0)

尽管apps脚本似乎可以在块范围内处理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(一次性使用分配除外)。