変数のスコープ
これはAfterEffectsに特化した問題ではなくJavaScript全般の問題です。
JavaScriptの変数スコープはちょっと特殊です。まず下のコード
for(var i=0; i<100; i++) {
var myValue = 'this value';
}
alert(typeof myValue);
私はJavaScriptではブロックで変数のスコープが発生「しない」という仕様を知らなかったので、この場合alertがundefinedを返してくることを期待してました...が、実際には本人の意図とは裏腹にグローバル変数を定義してしまっていたということになります。更にJavaScriptの困った仕様として以下のようなものもあります。...
function tryThisFunction(){
for(i=0; i<100; i++) {
var myValue = 'this value';
}
}
var myGlobal = tryThisFunction();
alert(i);
この例ではfor文の中で宣言なしでi=0という変数を定義しているために、iがグローバル変数になってしまってます。JavaScriptでは未宣言の変数を使用したときに自動的に「グローバルスコープ」で宣言されちゃいます。このバグが比較的複雑なコードの中に紛れると結構厄介な上に、発見したときの精神的な破壊力が半端ないです。もうこの仕様は欠陥といって差し支えないと思うんですけど...
この記事はサイトオーナーのブログより一部修正して転載いたしました。オリジナルの記事はこちらで読めます。
http://hiroshisaito.net/blog/after-effects-scripting-notes.html