やったこと

webサービスを作るときに考えたことを垂れ流します

【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の中を通ってしまう運命にあるということですね。

こんな動作知らなかったよ・・。