変数のスコープ

これは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