【发布时间】:2018-10-07 11:09:12
【问题描述】:
我在应用程序脚本上调试脚本时发现了一个奇怪的行为。
我不知道为什么 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 1 0和0 1 0? -
引用:“常量的值不能通过重新赋值改变,也不能重新声明”Link to Reference
-
我猜
block-scope在应用程序脚本中不能与const一起使用...因为它基于 ES3 和 ES5+ 的樱桃精选。您可以在范围之外Logger.log(b),它仍然会记录最后一个值...保持提升...可能只禁止重新声明(我猜有时是静默)。 -
计划将 Apps Script 中的 JavaScript 实现更新到较新的版本,但没有公布具体何时实现。
-
我只建议在 Apps 脚本的函数范围内使用
const。块范围应该是有效的,但 Apps 脚本并不完全符合 EMCAScript。
标签: javascript google-apps-script