この質問では、「機能」ではなく、「機能」を聞きたい パズル
<script type="text/javascript">
var test = function() {
alert('a');
};
var test1 = new function() {
alert('b');
};
</script>
なぜ「b」がポップアップするのですか?
この質問では、「機能」ではなく、「機能」を聞きたい パズル
<script type="text/javascript">
var test = function() {
alert('a');
};
var test1 = new function() {
alert('b');
};
</script>
なぜ「b」がポップアップするのですか?
関数 (p1、p2、…、pn、本体)
Function 関数がいくつかの引数 p1、p2、…、pn、body (n は 0 の場合、つまり「p」引数はなく、body も提供されない場合があります) を使用して呼び出される場合、次の手順が実行されます。撮影:
標準の組み込みコンストラクター Function が同じ引数を持つ新しい式で使用されたかのように、新しい Function オブジェクトを作成して返します。
new function
関数を実行します。IIFE (Immediately- Invoked Function Expression) も使用できます。
var test1 = (function() {
alert('b');
}());
new
Javascript の Factory パターンに使用されます。コンストラクター関数を実行することにより、オブジェクトを作成して返します。あなたの場合、使用する意味がありませんnew
。
JavaScript の「new」キーワードとは何ですか?を参照してください。新しいキーワードの基本的な説明。
基本的に、コンストラクターを新しいオブジェクトに呼び出しています。披露させて。
var Animal = function(name) {
alert("Animal Created: " + name);
}
jaguar = new Animal("Cool");
それとあなたがしたこととの唯一の違いは、新しいオブジェクトを定義するのと同じ行で関数を宣言したことです:
jaguar = new function(name) {
alert("Animal Created: " + name);
}
そのため、「b」が出力されました。
コンストラクターとして使用するために構築された関数は、引数を渡さない場合、括弧を必要としません。
var Person = function () { this.is_alive = true; },
bob = new Person;
bob.is_alive;
...しかし、返されたオブジェクトを使用しているかどうかに関係なく、任意の関数をコンストラクターとして呼び出すことができます...
new function () { console.log("Bob"); }
これにより、関数はどこにも保存されません。その場で即座に実行されます。