gut es gibt mehrere Dinge dazu:
zuerst: Der Name der Funktion wird lokal sein, so dass Sie in nur lokal die gleiche Funktion aus aufrufen können. Das kann bei Verwendung eine unendliche Rekursion auslösen, es sei denn, es wird so gefiltert if(doesThisWork.caller != doesThisWork) return doesThisWork(a,b);
.
Zweitens weisen Sie der Funktion einen Namen zu (nicht als anonyme Funktion), sondern lokal für den Container.
TL; DR => springen Sie zu der Analyse für eine klarere Idee.
ist es interessant, die Unterschiede beachten zwischen Deklaration Methoden der Funktion:
Inline-Deklaration:
var x = function fnName(){}; console.log(x.prototype); => fnName {} // but used locally to x
var x = function(){}; console.log(x.prototype); => Object {} // no local name, only global x
bei Parse Zeit/Laufzeit Erklärung:
function fnName(){}; console.log(fnName.prototype); => fnName {} // global* and local name
Meine Analyse: ist, dass die Lokalität hier aufgrund der Zuweisung ist, wie wenn Sie eine Funktion innerhalb der Funktion deklarieren, wird dieser Name lokal zu der enthaltenden Funktion und nicht außerhalb verwendet, das gleiche gilt für die Variable, die eine Funktion enthält, denn es enthält es und seinen Namen. immer noch kann die Variable, die die Funktion enthält, in ihrem Gültigkeitsbereich verwendet werden, da sie lokal für ihre Container-Funktion ist, die ein anderer Bereich ist.
* global bedeutet hier global zum Speicherort der Funktion nicht zum Dokument. da es lokal für den Container, aber global für andere Objekte im selben Container ist.
@stackErr: Scheint gut. Das ist ein benannter Funktionsausdruck. – elclanrs
nicht sicher, aber ich würde sagen, variabler Bereich. –
[Dies scheint nützlich zu sein] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope#Function_constructor_vs._function_declaration_vs._function_expression). – Marty