クロージャとは”関数の中の関数”という意味で見てほしい.
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);//"グローバル"
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 件のコメント:
コメントを投稿