Home‎ > ‎Tips‎ > ‎

変数のスコープ


これは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では未宣言の変数を使用したときに自動的に「グローバルスコープ」で宣言されちゃいます。このバグが比較的複雑なコードの中に紛れると結構厄介な上に、発見したときの精神的な破壊力が半端ないです。もうこの仕様は欠陥といって差し支えないと思うんですけど...


この記事はサイトオーナーのブログより一部修正して転載いたしました。オリジナルの記事はこちらで読めます。


Comments