2016-09-12T17:37:17+09:00
run ハンドラ内の変数はトップレベルだけで特別扱いされている?
スクリプトエディタで、ハンドラを定義することなくスクリプトを書き始めれば、そこはトップレベルの暗黙の run ハンドラ として、実行されます。そして、run ハンドラ内の変数は、property として保存されます。
それを確認するために、次のスクリプトを実行してみてください。
最初の実行では、
2回目以降の実行では、x の値が定義されているので、
と表示されるはずです。つまり、run ハンドラ内での変数 x への代入によって property x が生成されていることになります。
property が生成されているなら、ユーザー定義ハンドラからアクセスできるはずですね。そのことを、次のスクリプトで確認できます。ただし、property 宣言がないので、my が無いと参照できません。
さて、このような性質は、トップレベル以外の任意の run ハンドラでもあるのか?ということが気になります。結論から言うと、トップレベルでないスクリプトオブジェクトの run ハンドラ内の変数は通常のローカル変数になります。それを確認するために、次のように、上と同じことをネストして定義したスクリプトオブジェクトに対して行ってみます。
トップレベルでないスクリプトオブジェクトの run ハンドラで変数を設定しても、その変数をハンドラの中からアクセスできませんでした。つまり、property を生成することは無いようです。
run ハンドラ内の変数について、エレガントな統一的な知見が欲しかったけど、そのような期待は打ち砕かれ、「トップレベルの run ハンドラの変数だけが特別」ということのようです。