ではでは、まず最初にこの3つの項目を理解する。
•関数内の関数である!
•関数を返す関数である!
•無名関数である!
クロージャとは 関数なんです。(へぇ)
その次に
クロージャとは、関数の中の関数なんです!!(はぁ)
関数の中の関数とはなんぞや。
function outer(){
function inner(){
alert("hello");
}
}
関数outerの中で、関数innreが定義されている!これは正しいコードです。function outer(){
function inner(){
alert("hello");
}
}
inner();
function outer(){
function inner(){
alert("hello");
}
}
outer();
function outer(){
function inner(){
alert("hello");
}
inner();
}
outer();
無名関数、そのままの通り、名前の無い関数です。
では通常の名前のある関数と何が違うか
//名前のある関数。
function nameName(){
alert('こんちゃーす');
}
//名前の無い関数
nameName = function(){
alert('こんちゃーす');
}
主な違いは//名前のある関数。
function nameName(){
alert('こんちゃーす');
}
nameName()
//名前の無い関数
nameName = function(){
alert('こんちゃーす');
}
nameName()
//nameName()で呼び出さなければならないが
(function () {
alert('こんちゃーす');
})();
//で宣言と同時に呼び出しが可能となる
function outer(){
var inner = function (){
alert('押忍');
}
return inner;
}
var go = outer();
go();
function オッサン(){
var inner = function (){
alert('押忍');//押忍って言えるにはこうするって知識
}
return inner;// 教えれるんだけどな。聞かれたら
}
var 若者 = オッサン(); // 若者「オッサン!押忍と言える手法…俺にくれ!!!」 オッサン「いいですとも!」
若者(); //若者「押忍」
近からず、遠からず、混乱させるつもりなんてこれっぽっちもないfunction outer(){
function inner (){
alert('押忍');
}
return inner;
}
var go = outer();
go();
function outer(){
return function (){
alert('押忍');
};
}
var go = outer();
go();
function outer(){
var inner = function (){
var x = '押忍'
alert(x);
}
return inner;
}
var go = outer();
go();
function outer(){
var x = '押忍'
var inner = function (){
alert(x);
}
return inner;
}
var go = outer();
go();
function outer(){
var x = 1
var inner = function (){
alert(x);
x = x + 1;
}
return inner;
}
var go = outer();
go();
go();
go();