3.Callオブジェクトとはなんぞや?
そして、生成タイミングとは?
先ほどの関数
function f(){
var value = 普通の変数 ;
var g = function ( ) { /* 任意の関数 */ } ;
console.log(value);
}
これを呼び出す時、実はCallF(仮)という
オブジェクトが生成される。
f(); //この時、関数f内部でCallFが生成される
//しかし、呼び出し直後すぐにCallFはガベコレの対象となる。
5.
考え方としては
function f(){
var value = 普通の変数 ;
var g = function ( ) { /*任意の関数*/ };
console.log(value);
}
とある関数が
function f(){
//CallF = {}; 関数内部でCallオブジェクトが暗黙生成
//CallF.value = 普通の変数 ;
//CallF.g = function ( ) { /*任意の関数*/ };
//console.log(CallF.value);
var value = 普通の変数 ;
var g = function ( ) { /*任意の関数*/ };
console.log(value);
}
と、なっているイメージ。
5.関数の中に関数を定義する
function f( ){
var value =エンクロージャ側の変数 ;
function g ( ){
//クロージャー側の内容
console.log(value);
}
g( );
}
上記のような関数の場合、関数fをよびだすと
そのまま間接的に関数gを呼び出すことと同義になる。
この時、関数gはエンクロージャのローカル変数を
参照することが可能である。
これはスコープチェインと呼ばれている。