Javascript閉パッケージ関数の理解
6134 ワード
クローズドパッケージコンセプトにはA関数があり、A関数の内部にはB関数 が返される.再A関数外部変数参照このB関数 B関数内部はA関数内部のプライベート変数 にアクセスする.
関数の役割ドメイン(閉パッケージの事前知識)
パッケージを閉じる前に関数をレビューします.関数には2つの段階があります.a.定義段階、b.呼び出し段階です.閉包関数をマスターするには必ず理解しなければならない.
関数定義フェーズストレージスペース を開く関数内のコードをそっくりこの空間内に置く(変数を解析しない) 記憶空間のアドレスを関数名 に与える.
関数呼び出しフェーズ関数名のアドレスに従って関数の記憶空間 を見つける.形パラメータ 事前解析 メモリに実行空間を開く 関数記憶空間のコードを取り出し、開いたばかりの実行空間で を実行する.の実行が完了すると、メモリに開いている実行スペースは 破棄されます.関数が実行されると、実行空間( が開きます. を実行する.コードの実行が完了すると、この を破棄する.
関数実行スペース各関数には、記憶領域 がある.しかし、呼び出しのたびに全く異なる実行空間 が生成される.であり、実行空間は関数の実行が完了すると破棄されるが、記憶空間は ではない.では、この関数空間が実行されると破棄されます.何の意味がありますか. この空間を破壊しない方法があります 閉パケットは、この破棄されない実行空間 を利用する.
関数実行領域を破棄しない関数の実行スペースは、関数の実行が完了すると、 が破棄されます.しかし、関数の内部に参照データ型が戻ると、関数の外部に変数が受け入れる場合 .では、この関数実行空間は を破棄しません.
クローズドパッケージ
破棄しないスペース閉パケットの最初の条件は、空間を破棄しない論理 を利用することである.は、1つのオブジェクトデータ型 を返すにすぎない.ではなく、関数データ型 を返します.
どのようにして閉パッケージを生成しますか?は、ネストされた内部関数が親関数の属性に定められ、参照されると、閉パケットを生成する. クローズを生成するには、ネストされた関数と、サブ関数が親関数の属性または変数を参照してクローズを生成する必要があります.
クローズドパッケージの特徴なぜ特徴と呼ぶのかは、彼のすべての点が長所であり、欠点でもあるからだ. 変数のライフサイクルを延長 の利点:実行空間が破棄されないため、変数も破棄されない の欠点:実行領域が破棄されないため、メモリに が常に存在する.は、関数内部のプライベート変数 にアクセスすることができる.の利点:閉包関数を使用して関数内部のプライベート変数 にアクセスできる.の欠点:実行領域は破棄されず、メモリに が常に存在するプライベート変数(関数であればこの特徴がある) を保護の利点:外部からのアクセスからプライベート変数を保護する 欠点:アクセスする場合は、閉パッケージ関数 を使用する必要があります.
閉じた関数の欠点は致命的ですメモリ領域に破壊されないものがある場合、 が存在するからです.ではメモリ消費量が発生し、多すぎるとメモリオーバーフロー につながる.では、結果としてメモリリーク閉パケットの役割 である.は、変数の宣言サイクルを延長する必要がある場合に です.または関数内部のプライベートデータにアクセスする必要がある場合 閉パッケージ関数を使用して を解決できます.
キーワード:閉パッケージ関数
関数の役割ドメイン(閉パッケージの事前知識)
パッケージを閉じる前に関数をレビューします.関数には2つの段階があります.a.定義段階、b.呼び出し段階です.閉包関数をマスターするには必ず理解しなければならない.
関数定義フェーズ
関数呼び出しフェーズ
function fn() {
console.log(' fn ')
}
fn()
xxff00
ととりあえず呼ぶ)console.log(' fn ')
このコードはxxff00
という空間でxxff00
空間は関数実行スペース
関数実行領域を破棄しない
function fn() {
var num = 100
console.log(' ')
//
return [1, 2, 3]
}
// res fn ( )
// => res fn xxff11
var res = fn()
/*
res fn
+ ,
+ ,
+
*/
res = null
/*
res , xxff11
+ ,
+
*/
クローズドパッケージ
破棄しないスペース
function a() {
// num a
var num = 100
return function b() {
console.log(num)
}
}
// res a
// res a ( b)
// a
var res = a()
// , res a b
// res
res()
// res , num
// a num
どのようにして閉パッケージを生成しますか?
クローズドパッケージの特徴
閉じた関数の欠点は致命的です
キーワード:閉パッケージ関数