2011年05月01日

JavaScriptでは関数の先頭で変数が宣言される

またJavaScriptの小ネタ。

何が表示される?
<script>
var a = "グローバル変数";
function doSomething() {
alert(a);
var a = "ローカル変数";
}
</script>


doSomething()が実行されたとき、何が表示されるでしょうか?
「alert(a);」の時点ではローカル変数は宣言されてないので、
直感的には「グローバル変数」と表示されそうな気がします。
ですが表示されるのは「Undefined」です。
何故!?

JavaScriptでは、関数内のどこで変数を宣言しても、内部的には関数の先頭で宣言されています。
なので「alert(a);」の時点で、既にグローバル変数は上書きされていることになります。

この罠を回避するには以下のような感じでしょうか。
・グローバルとローカルで変数名がかぶらないようにする。
・グローバル変数を使うときはthisを付けるようにする。
・関数の先頭でローカル変数を宣言するようにする。

関数の先頭でローカル変数を宣言するのは、個人的には嫌ですね。
ローカル変数を使う直前で宣言したいところです。
なんにせよ、素直にプログラムを書いていたらこの罠にはまることってあまりないと思います。
タグ:javascript
posted by ぺるたご at 22:21| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/198749787

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。