JavaScriptの恐怖
仕事でJavaScriptで作業。
まさかこんな罠があろうとは……
こんな感じのソース
function FuncA()
{
for (i = 0; i < 10; i++){
FuncB();
}
}function FuncB()
{
for (i = 0; i < 10; i++) {
work += i;
}
}
このプログラムはまともに動かない。なぜならば変数のスコープに問題があるからだ。
VBでOption Explicitを使わずにこれと同じようなプログラムを組んだとしたらちゃんと動くだろう。VBの場合、関数外でPublic宣言されていない場合に関数内で変数が出てくるとそれはローカルの変数として解釈される。ところがJavaScriptの場合、関数内でVarで宣言しない限りグローバル変数として解釈される。つまり先の関数のfor文で使われている変数iは同じ変数なのである。
JavaScriptで変数を宣言する場合は出来るだけVarで宣言するように気をつけた方がよいという事になる。……なんだかなぁ……
あとJavaScriptには変数の型宣言がない為、変数は数値でも文字列でもどちらでも解釈されうる。よって「work += i;」という文は数値の加算処理にもなりうるし、文字列連結にもなりうる。
結構面倒な言語である。
3月 6, 2007 at 01:03 午前 プログラミング | Permalink | コメント (0) | トラックバック (0)




