[25] Closure


1.クローズとは?


クローズドスペース内のデータを使用可能にするJavaScript構文

2.closureの使い方

if(1<2) {
    let a = function(){
        let abc = 123;
    }
    a();
    console.log(abc)
}
=== abc is not definedconsole.log(abc)を使用すると、console.log(abc)が属するif(1<2){}関数でabcが検索されます.
ただし、ナビゲーションターゲットではlet a=function(){}を除く
なぜなら、検索するカッコにカッコがある場合は、カッコは含まれていないと考えられます.

つまり、関数が実行された時点で使用される変数は使用できません。


Javascript内部では、メモリにlet abc=123を入力すると割り当てられますが、アクセスできない場合はメモリを割り当ててデータを浪費する必要がないため、メモリから除外されます(これは不要なデータになります).
しかし、この変数を関数の外で使用できれば幸いです.
if(1 < 2) {
    let a = function(){
        let abc = 123
        let ddd = function(){
            return 55
        }
        return ddd
    }
    let ccc = a()
    console.log(ccc())
}
===55
if(1 < 2) {
    let a = function(){
        let abc = 123
        let ddd = function(){
            return abc
        }
        return ddd
    }
    let ccc = a()
    console.log(ccc())
}
===123

Why?

let ccc = a()運転後
実行済みlet a = function(){}let a = function(){}の内運転let ddd = function(){}、内運転return abc、検索abclet ddd = function(){}の範囲内で見つからない
したがって、ScopeChainから親関数に移動し、let abc = 123を検索し、その値を返し、let a = function(){}の内部return dddを実行します.ccc()が実行されると、最終的にはlet a = function(){}が実行される社内ユーザlet ddd = function(){}したがって、JavaScript内部からデータを削除することなく、let a = function(){}の閉じた空間内のデータを使用することができる.