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