この記事では、JavaScript の匿名関数について説明します。必要な方は参考にしていただければ幸いです。
分析:
1. いわゆる匿名関数は、文字通り理解すると、名前のない関数です。JS では代わりに () を使用します (注、これは、英語状態)
2. 定義形式:
function (){ //to add codes that you want to add }
3. 無名関数の機能
(1) クロージャ関数と比較して、その最大の機能は次のとおりです。グローバル オブジェクトを汚染します。実行が完了すると、GC は自動的にメモリを再利用します。これがクロージャ関数との本質的な違いです。クロージャ関数の主な特徴は、
変数がメモリ内に常駐し、ブラウザが閉じられたときにのみ解放されることです。
function f1(){ var n=999; nAdd=function(){n+=1} function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 nAdd(); result(); // 1000
上記のコードでは、result は実際にはクロージャ f2 関数です。これは 2 回実行され、1 回目の値は 999、2 回目の値は 1000 でした。これは、関数 f1 のローカル変数 n が常にメモリに格納され、f1 が呼び出された後に自動的にクリアされないことを証明します。
なぜそうなるのでしょうか?その理由は、f1 が f2 の親関数であり、f2 がグローバル変数に割り当てられているため、f2 は常にメモリ内に存在し、f2 の存在は f1 に依存するため、f1 は常にメモリ内にあり、削除されないためです。呼び出しが完了すると、ガベージ コレクション メカニズム (ガベージ コレクション) によってリサイクルされます。
このコードでもう 1 つ注目すべき点は、「nAdd=function(){n =1}」という行です。まず、var キーワードが nAdd の前に使用されていないため、nAdd はグローバル変数です。ローカル変数よりも。次に、nAdd の値は匿名関数であり、この
匿名関数自体もクロージャであるため、nAdd は関数の外部で関数内のローカル変数を操作できるセッターと同等です。
(2) 一般関数と異なり、プリコンパイルは行われません。
function fuc() { fuc1(); //foo被提到了作用域的最前面, 于是这里可以正常调用foo函数 fuc2(); //这里会报错bar是个undefined function fuc1() {alert("foo()") } var fuc2 = function () { alert("bar")}; }
コード:
無名関数のいくつかの式:
モード 1: 関数リテラル(関数リテラル)
最初に関数オブジェクトを宣言し、次に実行します。 。
(function(){ // insert code here })();
モード 2: 優先順位式 (Prior Expression)
JavaScript は式を内側から外側に向かって順番に実行するため、宣言された関数を強制的に実行するために括弧が使用されます。
(function(){ // insert code here }());
モード 3: Void 演算子 (Void 演算子)
Void 演算子を使用して、単一のオペランドを実行します。
void function(){ // insert code here }();
要約: 以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。関連チュートリアルの詳細については、JavaScript ビデオ チュートリアルをご覧ください。
関連する推奨事項:
以上がJavaScript の匿名関数について説明するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。