関数式の解惑

4233 ワード

転載:http://www.nowamagic.net/librarys/veda/detail/1663
関数式(FEと略す)は、このような関数です.
  • ソースコードの中で表現の位置に表示されるべき
  • オプションの名前がある
  • 変数の対象に影響しない
  • コード実行段階で作成
  • この関数の種類の主な特徴は、ソースコードの中では常に表現の位置にあります.最も簡単な例は、割り当て宣言である.1varfoo = function() {2  ...3};このデモは、匿名関数式を変数fooに割り当て、その関数をfooという名前でアクセスできます.
    同時に定義に記述されているように、関数表現もオプションの名前を持つことができます.1varfoo = function_foo() {2  ...3};なお、外部FEでは変数「foo」によってfoo()にアクセスし、再帰的に呼び出されるような関数内部では名前「foo」が使用される可能性がある.
    FEに名前があると、FDとの区別が難しいです.しかし、定義が分かれば簡単に分かります.FEは常に表現の位置にあります.次の例では、様々なECMAScript表現が見られます.1// ( ) 2(functionfoo() {});3   4// 5[functionbar() {}];6   7// 81, functionbaz() {};表式定義では、FEはコード実行段階でのみ作成でき、変数オブジェクトには存在しません.1// FE ( )2alert(foo); // "foo" 3(functionfoo() {});4   5// , VO 6alert(foo);  // "foo" かなりの部分の問題が現れました.なぜ関数式が必要ですか?答えははっきりしています.これらを表現に使うと、変数のオブジェクトは汚染されません.最も簡単な例は一つの関数をパラメータとして他の関数に渡すことです.01functionfoo(callback) {02  callback();03}04   05foo(functionbar() {06  alert('foo.bar');07});08   09foo(functionbaz() {10  alert('foo.baz');11});上記の例では、FE割当値は変数(つまりパラメータ)に与えられ、関数はこの式をメモリに保存し、変数名来を通じてアクセスします.1varfoo = function() {2  alert('foo');3};4   5foo();もう一つの例は、パッケージを作成する閉じたパケットが外部コンテキストから補助的データを隠すことである(以下の例ではFEを使用して、作成後すぐに呼び出す).01varfoo = {};02  03(functioninitialize() {04  varx = 10;05  foo.bar = function() {06    alert(x);07  };08})();09   10foo.bar(); // 10;11alert(x); // "x" 関数foo.barが関数initializeの内部変数「x」にアクセスするのを見ました.また、「x」は外部から直接アクセスできません.多くのライブラリでは、このようなポリシーはしばしば「プライベート」データを作成したり、隠し補助エンティティを作成したりします.このようなモードでは、初期化されたFEの名前は無視されます.1(function() {2   // 3})();もう一つの例は、コード実行時に条件文によりFEを作成し、変数オブジェクトVOを汚染しないことです.1varfoo = 10;2   3varbar = (foo % 2 == 04  ? function() { alert(0); }5  : function() { alert(1); }6);7   8bar(); // 0