Heim >Web-Frontend >js-Tutorial >Drei Möglichkeiten, Funktionen in js zu definieren
js-Serie Tutorial 4-Funktion, Funktionsparameter
In js ist die Funktion selbst ein Objekttyp , sodass es definiert, zugewiesen und als Attribut eines Objekts oder Parameter anderer Funktionen verwendet werden kann. Der Funktionsname ist lediglich ein Verweis auf die Objektklasse der Funktion.
1. Funktionsdefinition
[1] Die Funktionsdeklarationsanweisung
verwendet das Funktionsschlüsselwort, gefolgt von einer Reihe von Parametern und dem Funktionskörper
function funcname([arg1 [,arg2 [...,argn]]]){ statement; }
【2】Funktionsdefinitionsausdruck
Eine als Ausdruck 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 als Lambda-Funktion bezeichnet ist eine Funktionsfunktion ohne Bezeichner nach Schlüsselwörtern
Im Allgemeinen benötigen als Ausdrücke definierte Funktionen keine Namen, was den Code, der sie definiert, kompakter macht. 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;}
Persönliches Verständnis ist, dass für benannte Funktionsausdrücke der Funktionsname dem formalen Parameter des Funktionsobjekts entspricht und nur verwendet werden kann innerhalb der Funktion; Der Variablenname entspricht dem tatsächlichen Parameter des Funktionsobjekts. Er kann innerhalb und außerhalb der Funktion verwendet werden Der durch die angegebene Funktion angegebene Name ist immer gleich dem Bezeichner, der dem Funktionsschlüsselwort folgt. Das Namensattribut der anonymen Funktion ist leer
var test = function fn(){ return fn === test; }console.log(test());//trueconsole.log(test === fn);//ReferenceError: fn is not defined
[3] 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
//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'
[Hinweis] Der Funktionskonstruktor kann keine Angaben machen B. einen Funktionsnamen, wird eine anonyme Funktion erstellt.
Technisch gesehen ist dies ein Funktionsausdruck. Die Verwendung 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 im Konstruktor übergebene Zeichenfolge zu analysieren, was sich auf die Leistung auswirkt
var functionName = new Function(['arg1' [,'arg2' [...,'argn']]],'statement;');
Function() Die vom Konstruktor erstellte Funktion wird immer global kompiliert im Rahmen ausgeführt werden. Daher ähnelt der Function()-Konstruktor dem im globalen Bereich ausgeführten eval()
var sum = new Function('num1','num2','return num1 + num2');//等价于var sum = function(num1,num2){ return num1+num2; }
[Hinweis] Nicht alle Funktionen können Konstruktoren werden
var test = 0;function fn(){ var test = 1; return new Function('return test');} console.log(fn()());//02 , Funktionsdeklarationsreihenfolge
Funktionsdeklaration wird im Vergleich zu Variablen zuerst geladen. Machen Sie sich also keine Gedanken darüber, ob die Funktionsdeklaration vor oder nach dem Aufruf erfolgt.
Wenn eine Funktion aufgerufen wird, wird zunächst im lokalen aktiven Objekt abgefragt, d. h. in der aktuellen js-Datei. Wenn keine Abfrage vorhanden ist, wird daher nach oben abgefragt In zwei JS-Dateien werden die beiden JS-Funktionen innerhalb der Datei aufgerufen, und die zuletzt deklarierte Funktion wird in anderen JS-Dateien aufgerufen.
3. WiederholteWiederholte Deklarationen von Variablen sind nutzlos und überschreiben nicht zuvor deklarierte Variablen im gleichen Bereich, aber wiederholte Deklarationen von Funktionen überschreiben frühere Deklarationen oder Variable mit demselben Namen.
var o = new Math.min();//Uncaught TypeError: Math.min is not a constructor
//变量的重复声明无用var a = 1;var a; console.log(a);//1
//覆盖同名变量var a;function a(){ console.log(1); }a();//14. Löschen
Variablen, die durch Funktionsdeklarationsanweisungen erstellt wurden, können nicht gelöscht werden, was der Variablendeklaration entspricht.
//覆盖同名函数a();//2function a(){ console.log(1); }function a(){ console.log(2); }
In diesem Artikel werden drei Möglichkeiten zum Definieren von Funktionen in js vorgestellt. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
„Wahr und Falsch“ in JSSo bestimmen Sie Kollisionen durch JS! Einführung einiger js-Implementierungslösungen für klassische AlgorithmenDas obige ist der detaillierte Inhalt vonDrei Möglichkeiten, Funktionen in js zu definieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!