【JavaScript】レシカルスコープ芸人
今日レシカルスコープってなんだっけって思い、ぐぐったら わたしの書いたgithubが出てきた。
過去の自分に教わった。。 んで思い出した。
例えると
部屋があります。
庭があります(部屋は当然庭の中の家にあります。)
部屋で宣言したローカル変数(var)があり、
さらに部屋の中で宣言した関数fがそのvarを参照していたら、
同じ名前の変数が庭に既に宣言されていたとして、(グローバル変数)
庭で返り値とされた関数fが実行されてもfは部屋で宣言されたvarを参照する
これが 「関数は実行された時のスコープではなく、宣言時のスコープを参照する」の意味かな。。
var x = '庭';
var f = function(){ var x = '部屋';
return function(){return x}
//宣言した時のスコープは’部屋’を参照している
};
var f1 = f();
x -> '庭'
f1()
->'部屋'//関数実行時は一番上の'庭'もあるけど宣言時の'部屋'を参照する
でその関数宣言時のスコープがレシカルスコープ。
違いますか??過去のわし。。
スコープは部屋から庭へと変数を探す。
庭になければundefined
でも庭から部屋の変数は見えない
内から外へは辿っていける(スコープチェーン)けど外からはできない。
ここの理屈が以前本当に分からなかった。。
prototypeがチェーン役をするんだけど、ここらへんも「にゃーちゃんに教えなきゃ」