Beh, ci sono cose più su questo:
prima: il nome della funzione sarà locale, in modo da poter chiamare la stessa funzione dall'interno solo localmente. che potrebbe innescare una ricorsione infinita quando usato, a meno che non venga filtrato come questo if(doesThisWork.caller != doesThisWork) return doesThisWork(a,b);
.
in secondo luogo è che si sta assegnando un nome per la funzione (non lo si lascia come funzione anonima) ma locale al suo contenitore.
TL; DR => passare all'analisi per un'idea più chiara.
è interessante notare le differenze tra i metodi di dichiarazione della funzione: dichiarazione
linea:
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
al parse-time/dichiarazione di run-time:
function fnName(){}; console.log(fnName.prototype); => fnName {} // global* and local name
La mia analisi: è che la località qui è dovuta all'assegnazione come quando si dichiara una funzione all'interno della funzione, quel nome sarà usato localmente per la funzione di contenimento e non al di fuori di questo, lo stesso vale per la variabile che contiene una funzione, dal momento che lo contiene ed è il suo nome. ancora la variabile che contiene la funzione può essere utilizzata nel suo ambito, in quanto è locale per la sua funzione contenitore che è un ambito diverso.
* globale qui significa globale alla posizione della funzione non al documento. come è locale al suo contenitore ma globale ad altri oggetti nello stesso contenitore.
@stackErr: sembra soddisfacente. Questa è un'espressione di funzione con nome. – elclanrs
non sono sicuro, ma direi scope variabile. –
[Questo sembra utile] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope#Function_constructor_vs._function_declaration_vs._function_expression). – Marty