1)ネストされた関数、それによって、外部機能のプロセスのローカル変数を更新し、内部機能、外部コール内部関数を返すことによって、外部の機能にアクセスする関数内のローカル変数。
2)範囲のコードが実行されるのうち、まだ完了した後に存在します
3)メモリリークが発生することがあり、オブジェクトの参照カウントが0、JS自動復旧である場合、循環参照は、A、B、B C ....リークメモリ参照として引用場合閉鎖、外部参照内部変数、。
関数アウター(){ VARの NUM = 1 。 戻り 関数 (){ 戻り NUM + = 1 ; } } VAR G = アウタ()。 console.log(G())// 2 はconsole.log(G())// 3 はconsole.log(G())// 4
3)アプリケーション
、APIパッケージ
VAR OBJ = {}; (関数(エクスポート){ VAR NUM = 1; // 私有变量 export.add = 関数(){ 戻り NUM + = 1 ; }; エクスポート解除 = 関数(){}; })(この .OBJ = {})
即時実行機能発現と閉鎖サイクル/非同期コールバックで使用されるB、生命維持
機能arrSet(){ VAR ARR5 = [] のための(VAR I = 0; I <3; I ++ ){ VAR OBJ = { ID:I、 追加:機能(NUM){ 戻り 関数(){ 戻りNUM } }(I ) } arr5.push(OBJ) } 戻りARR5。 } VAR ARR = arrSet()。 console.log(ARR [ 0] .add())// iが0 = はconsole.log(ARR [1] .add())//をiが1 = console.log(ARR [2] .add())// i = 2
カリー化関数:以前に渡された特定のパラメータの関数、内部関数に格納されます。
関数createNum(開始){ リターン 機能(エンド){ 戻り開始+ = 終了。 } } VAR T = createNum(5 )。 console.log(T( 3))。 // 8 にconsole.log(T(2))。// 10
アプリケーション: UIパーシャルリフレッシュ 機能アップデート(インデックス){ リターン 機能(テキスト){ $( "のdiv#" + インデックス).htmlを(テキスト); } } Ajaxリクエストの 機能の更新(コールバック){ $アヤックス({ 成功:機能(データ){ コールバック(データ); } }) }