Ich verbrachte viel Zeit, um herauszufinden, der Grund für falsches Verhalten der Funktion und war wirklich überrascht von meiner Untersuchung Ergebnis.Javascript Funktion Erklärung und hissen
werde ich alle meine komplizierte Logik komprimieren und wird mit sehr einfachen Beispiel darstellen:
ich einige Testamentsvollstrecker haben:
function run() {
//define one more fn inside
function render() {
//returns execution result
return 1;
}
//I use this execution result
console.log(render()); //expect 1, but was 2
//here I have lot of code added by other developers
//and after some refactoring and code merge was added
//one more implementtaion
//it was done by accidentally as merge issue
function render() {
return 2;
}
}
Meine große Überraschung, dass console.log
druckt 2
. Erst nachdem ich die zweite Funktion mit dem gleichen Namen erkannt habe, kann ich versuchen, dies mit populären Wörtern wie histing zu erklären, aber ich verstehe nicht, wie dies in diesem konkreten Beispiel möglich ist.
Auch wenn die zweite render
Funktion der Variablen zugewiesen wird, dann funktioniert dieser Code wie erwartet. Dies kann auch nicht explane Hissen Definition verwendet wird, als erste Funktion nicht auf Variablen zugewiesen wurde:
function render() {
//returns execution result
return 1;
}
console.log(render()); //returns 1
var render = function() {
return 2;
}
ich völlig verstehen, dass dieser fehlerhafter Code ist, aber ich will, warum diese Werke verstehen auf diese Weise und wie spart man nicht Zeit mit der Identifizierung solcher Art von Problemen?
Wie erkennt man es? einen Linter laufen lassen. – epascarello
[JavaScript-Funktionsdeklarationssyntax: var fn = function() {} vs Funktion fn() {}] (https://stackoverflow.com/questions/336859/javascript-function-declaration-syntax-var-fn-function- vs-function-fn? rq = 1) – Andreas
Fragen Sie also, wie das Heben funktioniert? –