ホームページ ウェブフロントエンド jsチュートリアル javascript_javascript スキルの匿名関数を使用して、いくつかのシンプルで興味深いコード部分を分析します。

javascript_javascript スキルの匿名関数を使用して、いくつかのシンプルで興味深いコード部分を分析します。

May 16, 2016 pm 06:24 PM
javascript 無名関数

1. カプセル化呼び出しの単純な形式

コードをコピー コードは次のとおりです:

var userName = function( ) { return "jeff wong" } ();
alert(userName);


上記のコードは、次のように徐々に分解できます。書き込み:
コードをコピー コードは次のとおりです。

var anonymousFunc = function() { return "jeff wong" }; // 匿名関数
var name = anonymousFunc(); // この関数を実行して人の名前を返します


2. 新しい関数 (大文字の Function) の形式です

コードをコピーします コードは次のとおりです:
var a = new Object();
var b = new Function();
//alert(typeof (a)); //object
//alert( b)); //関数
alert(a); //[オブジェクト オブジェクト]
alert(b); //匿名関数
//alert(a == b); 🎜>//alert(a === b); //false



ご覧のとおり、変数 a がポップアップします。 ] と新しい関数 (大文字の関数であることに注意してください)、b が表示されると、匿名関数が生成されます。 b は匿名関数であるため、関数はもちろん実行できます。次のコードを試して推測を検証します。


コードをコピー コードは次のとおりです: alert(b()); //未定義
alert(a()); //スクリプト エラー プロンプト「関数が見つかりません」




3. 新しい関数は違いを生むことができます (小文字関数)
(1)、単純な空の関数



コードをコピーします コードは次のとおりです。 var func = new function() { }
alert(typeof (func));
alert(func); //[object Object]
//alert(func()); //スクリプト エラー func は関数ではありません




実際、上記のコードは次の記述メソッドと同等です:



コードをコピー コードは次のとおりです: function anonymousClass() { } //匿名クラス
var instance = new anonymousClass();
alert(typeof (instance));//object
alert(instance); [object Object]

[code]

(2) この関数には、
[code]
var func = new という戻り値があります。 function() { return "ジェフ ウォン" };
alert( typeof (func))
//alert(func()); >



実際、上記のコードは次の記述と同等です:



コードをコピー
コードは次のとおりです。 function anonymousClass () { return "jeff wong" } //Anonymous classvar instance = new anonymousClass(); (typeof (instance));//object alert(instance); //[ object Object]


(3)、関数には戻り値がまだあります。メソッドが少し異なります

次のコードと (2) の違いに注意してください。次に注目したいのは、少し異なる記述形式であるためです。



コードをコピー


上記のコードと同等の形式は依然として単純です:




コードをコピー


コードは次のとおりです。

実行して結果を見ましたか?そうです、3 番目の書き方では、func またはインスタンスをポップアップすると、予期せず「jeff wong」という文字列が得られます。 (2)と(3)のコードをよく比較すると、returnの書き方が少し違う以外はほぼ同じなので、関数を作っているのはnew Stringの形式であることは間違いないと推測します。予期せぬ効果を生み出します。 なぜこのようなことが起こっているのでしょうか?

JavaScript では、新しい式の後のコンストラクターがプリミティブ型を返す (return) 限り、(リターンがない場合は、実際には (1) などの未定義のプリミティブ型を返します) ことがわかります。 (2) メソッドの書き込みの場合、new によって作成された匿名オブジェクトが返され、new 式の後のコンストラクターがオブジェクト (Object)、関数 (function)、配列 (Array) などの参照オブジェクトを返します。 ) などの場合、返される参照オブジェクトは、new によって作成された匿名オブジェクトを上書きします。ここで、(3) の記述を分析してみましょう。 new String は文字列参照オブジェクトを構築するため、new によって作成された匿名オブジェクトが対象となり、new String が指す参照値は「jeff wong」であるため、ポップアップは次のようになります。現在の新しい文字列によって割り当てられる値です。

最後に、次のコードが何を返すかを見てみましょう:

コードをコピー コードは次のとおりです:

var func = new function() { var str = new String("jeff wong") };//別の方法で記述します
//alert(typeof (func)); //オブジェクトは期待されています
alert(func); //ここでの結果はどうなるでしょうか?

著者: ジェフ・ウォン
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C++ 匿名関数の使用法と特徴 C++ 匿名関数の使用法と特徴 Apr 19, 2024 am 09:03 AM

C++ 匿名関数の使用法と特徴

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法

Python ラムダ式: 省略、簡潔、強力 Python ラムダ式: 省略、簡潔、強力 Feb 19, 2024 pm 08:10 PM

Python ラムダ式: 省略、簡潔、強力

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを簡単に取得する方法

Golang の匿名関数は複数の値を返すことができますか? Golang の匿名関数は複数の値を返すことができますか? Apr 13, 2024 pm 04:09 PM

Golang の匿名関数は複数の値を返すことができますか?

匿名関数は golang 関数にどのように実装されますか? 匿名関数は golang 関数にどのように実装されますか? Jun 03, 2024 pm 07:09 PM

匿名関数は golang 関数にどのように実装されますか?

Python ラムダ式: プログラミングを簡単にする Python ラムダ式: プログラミングを簡単にする Feb 19, 2024 pm 09:54 PM

Python ラムダ式: プログラミングを簡単にする

Python ラムダ式: 匿名関数の威力を明らかにする Python ラムダ式: 匿名関数の威力を明らかにする Feb 24, 2024 am 09:01 AM

Python ラムダ式: 匿名関数の威力を明らかにする

See all articles