1. Funktionsdeklaration
function sum1(n1,n2){ return n1+n2; };
2. Funktionsausdruck, auch Funktionsliteral genannt
var sum2=function(n1,n2){ return n1+n2; };
Beide Der Unterschied: Der Parser liest zunächst die Funktionsdeklaration und macht sie zugänglich, bevor er Code ausführt, während der Funktionsausdruck warten muss, bis der Parser die Codezeile erreicht, in der er sich befindet, bevor er tatsächlich interpretiert und ausgeführt wird.
Streng genommen wird eine selbstausführende Funktion auch als Funktionsausdruck bezeichnet. Sie wird hauptsächlich zum Erstellen eines neuen Bereichs verwendet. Die in diesem Bereich deklarierten Variablen stehen in keinem Konflikt mit Variablen in anderen Bereichen von ihnen Es existiert als anonyme Funktion und wird sofort automatisch ausgeführt.
(function(n1,n2){ console.log (n1+n2) })(1,3);//4
Mehrere andere selbstausführende Funktionen:
//可用来传参 (function(x,y){ console.log(x+y); })(2,3); //带返回值 var sum=(function(x,y){ return x+y; })(2,3); console.log(sum); ~function(){ var name='~' console.log(name); }(); !function(){ var name='!' console.log(name); }(); ;(function(){ var name=';' console.log(name); })(); -function(){ var name='-' console.log(name); }(); //逗号运算符 1,function(){ var name=','; console.log(name); }(); //异或 1^function(){ var name='^'; console.log(name); }(); //比较运算符 1>function(){ var name='>'; console.log(name); }(); ~+-!(function(){ var name='~+-!'; console.log(name); })(); ~!(function(){ var name='~!'; console.log(name); })(); (function(){ var name='call'; console.log(name); }).call(); (function(){ var name='apply'; console.log(name); }).apply();
3. Funktionskonstruktionsmethode, Parameter müssen in Anführungszeichen gesetzt werden
var sum3=new Function('n1','n2','return n1+n2'); console.log(sum3(2,3));//5
Technisch gesehen ist dies ein Funktionsausdruck. Es wird im Allgemeinen nicht empfohlen, Funktionen auf diese Weise zu definieren, da diese Syntax dazu führt, dass der Code zweimal analysiert wird (das erste Mal wird der reguläre ECMAScript-Code analysiert, und das zweite Mal wird die an den Konstruktor übergebene Zeichenfolge analysiert). und somit die Leistung beeinträchtigen.
var name='haoxl'; function fun(){ var name='lili'; return new Function('return name');//不能获取局部变量 } console.log(fun()());//haoxl
Der Function()-Konstruktor analysiert den Funktionskörper und erstellt bei jeder Ausführung ein neues Funktionsobjekt, also beim Aufrufen von Function in einer Schleife oder bei häufig ausgeführter Funktion () Die Effizienz des Konstrukteurs ist sehr gering. Funktionsliterale werden nicht jedes Mal neu kompiliert, wenn sie mit dem Function()-Konstruktor erstellt werden. Er folgt nicht dem typischen Gültigkeitsbereich. Er führt sie immer als Funktion der obersten Ebene aus.
【Empfohlene verwandte Tutorials】
1. JavaScript-Video-Tutorial
2. JavaScript-Online-Handbuch
3 Bootstrap-Tutorial