Der Unterschied zwischen Funktionsliteral und Function()-Konstruktor
Obwohl es sich bei Funktionsliteral um eine anonyme Funktion handelt, können Sie aufgrund der Syntax einen beliebigen Funktionsnamen angeben. Wenn Sie eine rekursive Funktion schreiben, können Sie sie mithilfe von Function selbst aufrufen ( )-Konstruktor funktioniert nicht. Der
var f = function fact(x) { if (x < = 1) return 1; else return x*fact(x-1); };
Function()-Konstruktor ermöglicht die dynamische Erstellung und Kompilierung von Javascript-Code zur Laufzeit. In dieser Hinsicht ähnelt es der globalen Funktion eval().
Der Function()-Konstruktor analysiert den Funktionskörper und erstellt bei jeder Ausführung ein neues Funktionsobjekt. Daher ist die Effizienz des Aufrufs des Function()-Konstruktors in einer Schleife oder einer häufig ausgeführten Funktion sehr gering. Im Gegensatz dazu werden Funktionsliterale nicht jedes Mal neu kompiliert, wenn sie auftreten.
Beim Erstellen einer Funktion mit dem Function()-Konstruktor folgt sie nicht dem typischen Gültigkeitsbereich. Sie wird immer als Funktion der obersten Ebene ausgeführt.
var y = "global"; function constructFunction() { var y = "local"; return new Function("return y"); // 无法获取局部变量} alert(constructFunction()()); // 输出 "global" 函数直接量:
Solange es sich um eine Ausdruckssyntax handelt, geht der Skripthost davon aus, dass es sich bei der Funktion um eine direkte Funktion handelt. Wenn nichts hinzugefügt wird, wird sie als Funktionsdeklaration betrachtet, wenn sie mit der Funktion „Funktion schreiben“ beginnt in einen Ausdruck Innerhalb der Formel, beispielsweise der vier arithmetischen Operationen, behandelt der Host sie auch als direkte Größe wie folgt:
var a = 10 + function(){ return 5; }();
(function(){ alert(1); } ) ( ); ( function(){ alert(2); } ( ) ); void function(){ alert(3); }() 0, function(){ alert(4); }(); -function(){ alert(5); }(); +function(){ alert(6); }(); !function(){ alert(7); }(); ~function(){ alert(8); }(); typeof function(){ alert(9); }();
Es gibt viele Möglichkeiten, Funktionen in js zu definieren. und die funktionsdirekte Menge ist eine davon. Beispiel: var fun = function(){}: Wenn die Funktion fun nicht zugewiesen ist, handelt es sich um eine anonyme Funktion.
Sehen Sie sich an, wie anonyme Funktionen aufgerufen werden.
1. Funktionsaufrufe, die nach der Ausführung Rückgabewerte erhalten
//方式一,调用函数,得到返回值。强制运算符使函数调用执行 (function(x,y){ alert(x+y); return x+y; }(3,4)); //方式二,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用在去调用执行 (function(x,y){ alert(x+y); return x+y; })(3,4);
2. Rückgabewerte nach der Ausführung ignorieren
//方式三,调用函数,忽略返回值 void function(x) { x = x-1; alert(x); }(9);
Nun, schauen Sie sich das an die falsche Art,
//错误的调用方式 function(x,y){ alert(x+y); return x+y; }(3,4);
Das obige ist der detaillierte Inhalt vonDetaillierte Beispiele für den Unterschied zwischen Javascript-Funktionsliteralen und Function()-Konstruktoren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!