JavaScript自己実行関数(クローズド)
2469 ワード
1.グローバル汚染
変数宣言時に規則があります.繰り返し宣言は無効です.
var num=123;
var num='abc'
繰り返し宣言のコードはエラーを報告しませんが、その宣言の特徴がなくなり、普通の割当文に変換されます.
したがって、上記のコードは以下のコードと等価である.
var num=123;
num='abc';
例:
起因:関数内部で宣言されたデータは、関数外で直接アクセスできません.
包装とは小包、包装という意味です.閉じていると、閉じています.
クローズドとは、クローズドな特性を持ちつつ、パッケージの特性を持つ構造のことです.
コードの観点から言えば、いわゆるクローズドは関数です.
①関数内で宣言されている変数は、外部からアクセスできない、すなわち閉じられています.
②関数自体はパッケージ単位であり、関数を利用してコードをカプセル化することができるので、関数もパッケージ構造です.
したがって、関数には小包の特性があり、閉鎖的な特性もありますので、直接関数をクローズドと呼ぶことができます.
関数を実行すると、関数実行のためにメモリ空間が割り当てられます.
関数の実行が終了すると、メモリが解放されます.繰り返し使用できます.
この定義は欠陥がある.
関数内部でデータの参照を外部に戻すと、データが常に占有されていることが保証されます.
しかし、クローズドが解決すべき問題は、これらのデータにどのように間接的にアクセスするかである.
関数のデータにどうやってアクセスしますか?
①最も簡単なアクセス方式:戻ります.
したがって、このデータは破壊されない、すなわちリリースされない.
リボン:
クローズドとは、関数によって宣言された変数が外部にアクセスできなくなり、関数が閉じられた構造になります.
関数内のデータにアクセスする必要がある場合は、関数を利用して関数を返し、関数内のデータを関数外でこの関数内で返してもいい関数を使って内部のデータにアクセスすることも考えられます.
4.補足:メモリのリリース
jsには一切使われないデータが釈放されます.
5.クローズドの使い方
(1)サンドボックスモードとして
サンドボックス:独立した外界から隔離された運行環境です.
重複が多すぎて、計算済みのものを保存して、計算していないなら再帰しますが、計算してからまた保存します.
変数宣言時に規則があります.繰り返し宣言は無効です.
var num=123;
var num='abc'
繰り返し宣言のコードはエラーを報告しませんが、その宣言の特徴がなくなり、普通の割当文に変換されます.
したがって、上記のコードは以下のコードと等価である.
var num=123;
num='abc';
例:
var $ = function(selector){
return document.querySelectorAll(selector);// $
};
$('div').css(...);// , $('div') nodeList , css
2.クローズド起因:関数内部で宣言されたデータは、関数外で直接アクセスできません.
包装とは小包、包装という意味です.閉じていると、閉じています.
クローズドとは、クローズドな特性を持ちつつ、パッケージの特性を持つ構造のことです.
コードの観点から言えば、いわゆるクローズドは関数です.
①関数内で宣言されている変数は、外部からアクセスできない、すなわち閉じられています.
②関数自体はパッケージ単位であり、関数を利用してコードをカプセル化することができるので、関数もパッケージ構造です.
したがって、関数には小包の特性があり、閉鎖的な特性もありますので、直接関数をクローズドと呼ぶことができます.
関数を実行すると、関数実行のためにメモリ空間が割り当てられます.
関数の実行が終了すると、メモリが解放されます.繰り返し使用できます.
この定義は欠陥がある.
関数内部でデータの参照を外部に戻すと、データが常に占有されていることが保証されます.
function foo(){
var num = 123;
function func(){
return num;
}
return func;
}
var f = foo();
// f func,foo , func
// num , f
3.クローズドとは、関数内で定義された変数のことで、関数外ではアクセスできない関数です.しかし、クローズドが解決すべき問題は、これらのデータにどのように間接的にアクセスするかである.
関数のデータにどうやってアクセスしますか?
①最も簡単なアクセス方式:戻ります.
function foo(){
var num = 123;
return num;
}
var res1 = foo();
var res2 = foo();
//
②複数アクセスしたが、fは一回だけ呼び出すことができます.var res1 = foo();
var res2 = res1;
③関数を関数に戻し、関数を使ってデータを返します.function f(){
var num = 123;
return function(){
// , num
return num;
};
}
var foo = f();// ,
var res1 = foo();// num
var res2 = foo();//
2次チェーンを0段チェーンに戻し、2段チェーンを利用して1段チェーンの特性にアクセスすることができ、0段チェーンが1段チェーンに間接的にアクセスすることができる.したがって、このデータは破壊されない、すなわちリリースされない.
リボン:
クローズドとは、関数によって宣言された変数が外部にアクセスできなくなり、関数が閉じられた構造になります.
関数内のデータにアクセスする必要がある場合は、関数を利用して関数を返し、関数内のデータを関数外でこの関数内で返してもいい関数を使って内部のデータにアクセスすることも考えられます.
4.補足:メモリのリリース
jsには一切使われないデータが釈放されます.
5.クローズドの使い方
(1)サンドボックスモードとして
サンドボックス:独立した外界から隔離された運行環境です.
(function(){
// , , ,
})();
露出モード:var foo = (function(){
function foo(){}
return foo;
})();
(2)キャッシュ機能付きの関数var func = (function(){
//
return function foo(){
};
})();
//func
再帰的には、なぜ性能が低いですか?重複が多すぎて、計算済みのものを保存して、計算していないなら再帰しますが、計算してからまた保存します.