Heim > Web-Frontend > js-Tutorial > Drei Möglichkeiten, Funktionen in js zu definieren

Drei Möglichkeiten, Funktionen in js zu definieren

jacklove
Freigeben: 2018-06-15 15:59:47
Original
6309 Leute haben es durchsucht

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

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

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

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

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

[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'
Nach dem Login kopieren

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

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

[Hinweis] Nicht alle Funktionen können Konstruktoren werden

var test = 0;function fn(){
    var test = 1;    return new Function('return test');}
console.log(fn()());//0
Nach dem Login kopieren

2 , 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. Wiederholte

Wiederholte 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
Nach dem Login kopieren
//变量的重复声明无用var a = 1;var a;
console.log(a);//1
Nach dem Login kopieren
//覆盖同名变量var a;function a(){
    console.log(1);
}a();//1
Nach dem Login kopieren

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

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 JS


So bestimmen Sie Kollisionen durch JS!


Einführung einiger js-Implementierungslösungen für klassische Algorithmen

Das 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!

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