ホームページ > 記事 > ウェブフロントエンド > JS の基本チュートリアル: JavaScript の匿名関数を学習する
JS の基本チュートリアル: JavaScript の匿名関数を学ぶ
John Resig が細心の注意を払って思慮深い人物であることは間違いありません。彼は私たちが普段使用している匿名関数を注意深く研究しており、新しいことを掘り出すこともできます。通常、再帰は関数がそれ自体を呼び出すときに発生します。次のような関数呼び出しには馴染みがありません。
1.function hello(n){
2. return n > 0 ? hello(n-1) + "a" : "hiy"
3.}
4.alert(yell)//結果は次のようになります: hiyaaaa;
単一関数では問題ありません。匿名関数を使用してオブジェクト内に配置するとどうなるでしょうか。
1.var ninja = {
2. hello: function(n){
3. .};
6.alert(yell(4))//結果は次のようになります: hiyaaaa;
新しいオブジェクトを作成して ninja からの Yell メソッドをコピーすると、状況は異なります。匿名関数は ninja の内部にあるため、このメソッドは依然として ninja オブジェクトの Yell メソッドへの参照です。 Ninja オブジェクトを再定義すると問題が発生します。
02. hello: function(n){
03. return n > 0? ninja.yell(n-1) +
04. .};
06.var 侍 = { 叫ぶ: 忍者.yell };
07.var 忍者 = {};
09. 警告(侍.yell(4);
10.} ){
11.alert("ああ、これは良くない! ninja.yell はどこに行った?" );
12.}
13.//結果は次のようになります。 'd ninja.yell go?"
この問題を解決するにはどうすればよいですか? Yell メソッドの信頼性を高めるにはどうすればよいですか? 最も一般的な方法は、ninja.yell メソッド内で「this」を使用して、ninja オブジェクトのすべてのインスタンスを変更することです。つまり:
1 .var ninja = {
3. Return n & gt; This.yll (n-) + "a": "hiy";
5.};
ここでテストすると、必要な結果が得られます。これはもちろん 1 つの方法であり、別の方法は、矛盾しているように見えますが、うまく機能します。 01 .var ninja = {
02. エール: 関数 エール (n) {
03. エール (n-) + "a":
05. ((ninja.yell(4)) + " 期待どおりに動作します!" );
08.var ninja = {}; (samurai.yell(4))+ " メソッドはそれ自体を正しく呼び出します。";
通常の変数宣言では、さらに一歩進んで、次のようにすることもできます。 .var ninja = function myNinja(){
2. alert( (ninja == myNinja) + " この関数には 2 つの名前が付けられています。" );
4.ninja();上記の関数では、IE では「flase この関数には 2 つの名前が付けられています - 同時に !」が表示されます。FF では、「true この関数には 2 つの名前が付いています - 同時に !」が表示されます。著者はかつて次のように指摘しました: 匿名関数には名前を付けることができますが、それらは関数自体内でのみ表示されます。テスト結果では、IE では表示されませんでしたが、FF では作者の予想どおりの結果が得られました。同時にmyNinjaもテストしましたが、IEとFFでも結果が異なりました。
1.alert( typeof myNinja);
2.//FFでは「undefinde」です
3.//IEでは「function」です
このように、匿名関数の名前をIEでは、 FF では外部から表示されますが、関数内でのみ表示されます。実際、次のように、arguments.callee を使用して必要な結果を取得できます。.};
6.alert( ninja.yell(4));
Arguments.callee は、関数自体にアクセスするための信頼できるメソッドを提供します。この方法は比較的簡単で確実だと思います。
要約すると、これらのメソッドはすべて、複雑なコード構造を扱う際に非常に役立ちます。使用することを選択すると、コード構造がより簡潔かつ明確になります。これは作成者の本来の意図である可能性があります。
上記は基本的な JS チュートリアルです: JavaScript 匿名関数の内容を学習する その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。