ホームページ > ウェブフロントエンド > jsチュートリアル > Javascript_javascript スキルの匿名関数の概要

Javascript_javascript スキルの匿名関数の概要

WBOY
リリース: 2016-05-16 18:37:48
オリジナル
876 人が閲覧しました

1. 匿名関数とは何ですか?

JavaScript で関数を定義するには、通常 3 つの方法があります:

  1. 関数キーワード (関数) ステートメント:
    <code>function fnMethodName(x){alert(x);}</code>
    ログイン後にコピー
  2. 関数リテラル:
    <code>var fnMethodName = function(x){alert(x);}</code>
    ログイン後にコピー
  3. Function() コンストラクター:
    <code>var fnMethodName = new Function('x','alert(x);')</code>
    ログイン後にコピー

上記の 3 つのメソッドは同じメソッド関数 fnMethodName を定義します。最初のメソッドは最もよく使用されるメソッドで、関数を変数 fnMethodName にコピーします。この関数には名前がありません。つまり、匿名関数です。実際、 のかなりの数の言語に匿名関数 があります。

2. 関数リテラルと Function() コンストラクターの違い

  1. 関数リテラルは匿名関数ですが、構文では再帰関数を作成するときにそれ自体を呼び出すことができますが、Function() コンストラクターを使用することはできません。
    <code>var f = function fact(x) {
     if (x < = 1) return 1;
     else return x*fact(x-1);
    };</code>
    ログイン後にコピー
  2. Function() コンストラクターを使用すると、実行時に JavaScript コードを動的に作成およびコンパイルできます。この点では、グローバル関数 eval() に似ています。
  3. Function() コンストラクターは関数本体を解析し、実行されるたびに新しい関数オブジェクトを作成します。したがって、ループ内で Function() コンストラクターを呼び出したり、頻繁に実行される関数を呼び出したりする効率は非常に低くなります。対照的に、関数リテラルは、検出されるたびに再コンパイルされません。
  4. Function() コンストラクターを使用して関数を作成する場合、それは常にトップレベル関数として実行されます。
    <code>var y = "global";
    function constructFunction() {
      var y = "local";
      return new Function("return y"); <span>// 无法获取局部变量</span>
    }
    alert(constructFunction()()); <span>// 输出 "global"</span>
    </code>
    ログイン後にコピー

Function キーワード定義と比較すると、Function() コンストラクターには独自の特性があり、使用するのがはるかに難しいため、このテクノロジは通常はほとんど使用されません。関数のリテラル式は、関数のキーワード定義に非常に似ています。前述の違いを考慮すると、OS X 10.4.3 の一部の Webkit エンジンではリテラルの匿名関数にバグがあるというニュースがありますが、通常参照する匿名関数は、関数リテラルの形式での匿名関数を指します。詳細については、『JavaScript: The Definitive Guide, 5th Edition』の関数の章を参照してください。

3. 無名関数のコードパターン

昨日hedger wangは、 いくつかの匿名関数コード パターンを彼のブログで紹介しました:

エラー モード: 機能せず、ブラウザーは構文エラーを報告します。

<code>function(){
 alert(1);
}();</code>
ログイン後にコピー
  1. 関数リテラル: まず関数オブジェクトを宣言してから実行します。
    <code>(function(){
     alert(1);
    } ) ( );</code>
    ログイン後にコピー
  2. 優先式: Javascript は括弧の内側から外側に向かって式を実行するため、括弧を使用して宣言された関数を強制的に実行できます。
    <code>( function(){
     alert(2);
    } ( ) );</code>
    ログイン後にコピー
  3. Void 演算子 : かっこで囲まれていない単一のオペランドを実行するには、void 演算子を使用します。
    <code>void function(){
     alert(3);
    }()</code>
    ログイン後にコピー

これら 3 つの方法は同等です。Hedge Wang は個人的な理由から 3 番目の方法を好みますが、実際のアプリケーションでは、私が見て使用したのは最初の方法です。

4. 匿名関数の適用

  1. 「JavaScript のモジュール パターン」 の最初の文は「グローバル変数は悪魔です」です。匿名関数を var キーワードと組み合わせると、グローバル変数を汚染することなく Javascript がページに書き込まれることを効果的に保証できます。これは、見慣れないページに Javascript を追加する場合に非常に効果的かつエレガントです。実際、匿名関数は YUI とそれに対応する例で広く使用されており、他の Javascript ライブラリでも広く使用されています。
  2. JavaScript は関数型プログラミングの基礎です。詳細については、「関数型プログラミング手法による美しい JavaScript の記述」 および 「関数型 JavaScript プログラミング ガイド」を参照してください。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート