まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

GASでconstの挙動がおかしいので使わない方がよさそう

GASだとconstのスコープが違う?

最近のJavascriptとかTypeScript界隈では、varletconstが変数の宣言として使えて、scalaとかswift脳からするとなるべく再代入は避けたいのでconstを使いたい。

例えばfor文内で一時的な変数を宣言して利用しようとした場合こんなコードがあったとして、

function test() {
  
  for (var i = 0; i < 5; i++) {
    const k = i * 2;
    var m = i * 2;
    Logger.log('k = ' + k + ', m = ' + m);
  }
  
}

kもmもiが2倍された値が表示されるはずなんだけど、constで宣言した方は0のままになってしまう。一度代入されたらそれ以降変更されないようだ。グローバルスコープっぽい動き。

f:id:masato47744:20171109235828p:plain

なので、GASでconstを使う場合は、本当に一度でも代入したら変更しない定数にのみ使う方がよい。というかあんまり使わない方がいいかも。

node.jsでやってみるとちゃんとconstに再代入されてる

これが想定していた挙動

f:id:masato47744:20171109235851p:plain