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

Drei Möglichkeiten, Funktionen in js zu definieren

jacklove
jackloveOriginal
2018-06-15 15:59:476300Durchsuche

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()());//0

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

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);
}

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!

Stellungnahme:
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