【javascript】途中でvar変数宣言すると値がundefinedになってしまう!
javascriptを書いていてつまづいてしまいました・・。
以下のような処理を書いたんです。
グローバル変数「twitter_id」が存在しないときに、ローカル変数として同じ名前で変数を用意するという処理です(なんだか臭いコードですねこれは・・)
if(typeof twitter_id === undefined){ var twitter_id = 0; }
このコードは必ずifの中を通ってしまいます。
なぜならjavascriptではコード中に「var宣言」があると、その「var」はコード先頭にあると見なして、処理の頭で早々に変数を用意してしまう動作をするそうです(値にはundefinedがセットされる)
この動作は「変数の巻き上げ(ホイスティング)」と呼ばれているそうです。
結局グローバル変数「twitter_id」があろうとなかろうと、先頭で「undefined」で塗りつぶされた「twitter_id」が用意されてしまい、ifの中を通ってしまう運命にあるということですね。
こんな動作知らなかったよ・・。