Heim >Web-Frontend >js-Tutorial >Ausführliche Erklärung von Ausdrücken und Konstruktoren im Javascript-Grundlagen-Tutorial
Funktionsdefinitionsausdruck
Im Ausdrucksmodus definierte Funktion, der Name der Funktion ist optional
var functionName = function([arg1 [,arg2 [...,argn]]]){ statement; } var functionName = function funcName([arg1 [,arg2 [...,argn]]]){ statement; }
Anonyme Funktion (anonyme Funktion) wird auch Lambda-Funktion genannt ohne Bezeichner nach dem Funktionsschlüsselwort
Im Allgemeinen ist beim Definieren von Funktionen in Ausdrücken kein Name erforderlich, wodurch der Code, der sie definiert, kompakter wird. Funktionsdefinitionsausdrücke eignen sich besonders zum Definieren von Funktionen, die nur einmal verwendet werden
var tensquared = (function(x) {return x*x;}(10));
Während ein Funktionsdefinitionsausdruck einen Namen enthält, enthält der lokale Gültigkeitsbereich der Funktion einen an das Funktionsobjekt gebundenen Namen. Tatsächlich wird der Name der Funktion zu einer lokalen Variablen innerhalb der Funktion
var test = function fn(){ return fn; } console.log(test);//fn(){return fn;} console.log(test());//fn(){return fn;} console.log(test()());//fn(){return fn;}
. Bei benannten Funktionsausdrücken entspricht der Funktionsname dem formalen Parameter des Funktionsobjekts und kann nur innerhalb verwendet werden die Funktion; Der Variablenname entspricht dem tatsächlichen Parameter des Funktionsobjekts. Er kann sowohl innerhalb als auch außerhalb der Funktion verwendet werden.
var test = function fn(){ return fn === test; } console.log(test());//true console.log(test === fn);//ReferenceError: fn is not defined
Die Funktion definiert ein nicht standardmäßiges Namensattribut, durch das Auf den von der angegebenen Funktion angegebenen Namen kann zugegriffen werden. Der Wert dieses Attributs entspricht immer dem Bezeichner, der dem Funktionsschlüsselwort folgt. Das Namensattribut der anonymen Funktion ist leer
//IE11-浏览器无效,均输出undefined //chrome在处理匿名函数的name属性时有问题,会显示函数表达式的名字 function fn(){}; console.log(fn.name);//'fn' var fn = function(){}; console.log(fn.name);//'',在chrome浏览器中会显示'fn' var fn = function abc(){}; console.log(fn.name);//'abc'
Funktionskonstruktor
Der Funktionskonstruktor empfängt eine beliebige Anzahl von Parametern, aber der letzte Parameter wird immer als Funktionskörper betrachtet und die vorherigen Parameter zählen die Parameter der neuen Funktion auf
var functionName = new Function(['arg1' [,'arg2' [...,'argn']]],'statement;');
[Hinweis] Der Funktionskonstruktor kann dies nicht Geben Sie einen Funktionsnamen an, der erstellt wird. Ist eine anonyme Funktion
Technisch gesehen ist dies ein Funktionsausdruck. Dies wird jedoch nicht empfohlen, da diese Syntax dazu führt, dass der Code zweimal analysiert wird. Das erste Mal besteht darin, den regulären Javascript-Code zu analysieren, und das zweite Mal besteht darin, die an den Konstruktor übergebene Zeichenfolge zu analysieren, was sich auf die Leistung auswirkt.
var sum = new Function('num1','num2','return num1 + num2'); //等价于 var sum = function(num1,num2){ return num1+num2; }
Vom Function()-Konstruktor erstellte Funktionen werden immer kompiliert. Ausführen im globalen Maßstab. Daher ähnelt der Function()-Konstruktor dem im globalen Bereich ausgeführten eval()
var test = 0; function fn(){ var test = 1; return new Function('return test'); } console.log(fn()());//0
[Hinweis] Nicht alle Funktionen können Konstruktoren werden
var o = new Math.min();//Uncaught TypeError: Math.min is not a constructor
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung von Ausdrücken und Konstruktoren im Javascript-Grundlagen-Tutorial. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!