Wir schreiben Rückrufe oft über anonyme Funktionen.
Anonym bedeutet vereinfacht ausgedrückt eine Funktion ohne Namen, die in der Regel sofort ausgeführt wird. Aber wie verhält es sich im Vergleich zu benannten Funktionen (Funktionen mit Namen)?
Wir können einen Computer finden, der Shell-Befehle ausführen und eine große Anzahl von Funktionsaufrufen verwenden kann, um die Ausführungszeit der beiden zu sehen:
anonymous.js
Var-Anzahl = 100000000
, Summe = 0
while (count--) (function() { sum })()
Führen Sie es aus
$ Zeitknoten anonym.js
echte 0:1,456 Minuten
Benutzer 0m0.015s
sys 0m0.031s
Werfen wir einen Blick auf benannte Funktionen
named.js
Var-Anzahl = 100000000
, Summe = 0
var cb = function() {
Summe
}
while (count--) cb()
Führen Sie es aus
$ Zeitknoten namens.js
echte 0m0,575s
Benutzer 0m0.000s
sys 0m0.046s
Benannte Funktionen sind viel schneller, warum ist das so? Tatsächlich ist es nicht schwer zu erklären, dass anonyme Funktionen den Rückruf jedes Mal neu interpretieren müssen, benannte Funktionen jedoch nur einmal, sodass die Leistung verbessert wird. Der Test ergab jedoch, dass diese Verbesserung sehr, sehr gering ist Es besteht keine Notwendigkeit, einen sehr praktischen Rückruf als weitere Variable zu schreiben.
Darüber hinaus gibt es zwei Möglichkeiten, benannte Funktionen zu schreiben:
Funktionsausdruck
var func = function() {
console.log('a')
}
Funktionsdeklaration
Funktion func() {
console.log('b')
}
Tatsächlich kann es zu Problemen kommen, wenn diese beiden zusammen verwendet werden, z. B.
var func = function() {
console.log('a')
}
Funktion func() {
console.log('b')
}
//Die Ausgabe ist: a
Daher wird derzeit hauptsächlich die Form des Funktionsausdrucks verwendet, aber wie ist die Leistung der Funktionsdeklaration?
named2.js
Var-Anzahl = 100000000
, Summe = 0
Funktion cb() {
Summe
}
while (count--) cb()
Führen Sie es aus und vergleichen Sie die beiden
$ Zeitknoten namens.js
echte 0m0,553s
Benutzer 0m0.000s
sys 0m0.015s
$ Zeitknoten mit dem Namen 2.js
echte 0m0,529s
Benutzer 0m0.000s
sys 0m0.047s
Es scheint, dass die Funktionsdeklaration etwas schneller sein wird, aber die Geschwindigkeit ist sehr, sehr nicht offensichtlich. Ich persönlich empfehle immer noch, eine Funktionsdeklaration zu schreiben.
PS: Diese Daten wurden mit Git-Base unter Windows 7 getestet.