2013年1月19日土曜日

Javascriptのクロージャにおける変数のスコープ

Tips的なネタを一つ.
クロージャとは”関数の中の関数”という意味で見てほしい.
Javascriptのクロージャの引数をいちいち指定するのは書く方も面倒くさい.そこで気になるのはクロージャにおける変数のスコープである.それを説明するため,次のようなJavascriptコードを書いた.

message = "グローバル";
window.alert(message);

function test1(message){
  window.alert(message);//"グローバル"
  function test2(){
    window.alert(message);//"グローバル"
  }
  test2();
  
  var message = "ローカル1";
  window.alert(message);//"ローカル1"
  
  function test3(){
    var message = "ローカル2";
    window.alert(message);//"ローカル2"
  }
  test3();
  
  window.alert(message);//"ローカル1"
}
test1(message);

window.alert(message);//"グローバル"




実際に実行して遷移を見るとよく分かるはず.
簡単に解説すると,関数の引数は関数の中のグローバル変数になり,クロージャの変数に自動的に代入される.クロージャの中で変数を新たに代入すればクロージャの中のグローバル変数になり,クロージャの外の変数には影響を及ぼさない.
よくコードを追いながらアラートボックスのvalueを見てみてほしい.

0 件のコメント:

コメントを投稿