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(a()); //スクリプト エラー プロンプト「関数が見つかりません」
3. 新しい関数は違いを生むことができます (小文字関数)
(1)、単純な空の関数
alert(typeof (func));
alert(func); //[object Object]
//alert(func()); //スクリプト エラー func は関数ではありません
実際、上記のコードは次の記述メソッドと同等です:
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()); >
実際、上記のコードは次の記述と同等です:
コードをコピー
(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); //ここでの結果はどうなるでしょうか?
著者:
ジェフ・ウォン