当我在应用程序脚本上调试脚本时,发现了一个奇怪的行为。
我不知道为什么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
。
答案 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(一次性使用分配除外)。