Heim > Web-Frontend > js-Tutorial > Hauptteil

Detaillierte Beispiele für den Unterschied zwischen Javascript-Funktionsliteralen und Function()-Konstruktoren

伊谢尔伦
Freigeben: 2017-07-27 16:58:52
Original
2370 Leute haben es durchsucht

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);
};
Nach dem Login kopieren

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" 函数直接量:
Nach dem Login kopieren

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; 
}();
Nach dem Login kopieren
(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); 
}();
Nach dem Login kopieren

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);
Nach dem Login kopieren

2. Rückgabewerte nach der Ausführung ignorieren

//方式三,调用函数,忽略返回值 
void function(x) { 
x = x-1; 
alert(x); 
}(9);
Nach dem Login kopieren

Nun, schauen Sie sich das an die falsche Art,

//错误的调用方式 
function(x,y){ 
alert(x+y); 
return x+y; 
}(3,4);
Nach dem Login kopieren
anzurufen

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage