Există vreun avantaj în a defini numele funcției în „var new_function=function name(){};” în JavaScript?
Rulam un program pentru a schimba câteva părți din codul meu JavaScript când a apărut o eroare la declararea unei variabile ca funcție astfel:
var some_function = function name(args){
//do stuff
};
Codul în sine funcționează, dar mă întrebam doar dacă este ok să elimin „name” pentru toate funcțiile pe care le găsesc astfel (pentru că nu le strică în cealaltă problemă care analizează JavaScript-ul meu) sau dacă ar putea avea vreo utilitate pe care nu o pot vedea.
îndepărtarea „name”:
var new_function = function(){/*do stuff*/};
Notă: fișierul original în care s-a întâmplat prima dată a fost în jquery-1.6.4.js în:
jQuerySub.fn.init = function init( selector, context ) {
if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
context = jQuerySub( context );
}
return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
};
Mulțumesc pentru orice ajutor dinainte :)
Răspuns #1
Identificatorul name al Expresiilor de Funcție este accesibil doar în interiorul funcției.
În exemplul tău jQuery, identificatorul init nici măcar nu este folosit, așa că cred că singurul avantaj de a denumi funcția este doar în scopuri de depanare, un debugger va putea să-ți arate numele funcției într-un lung șir de apeluri.
Compară :
Împotriva
Există dezavantaje, un bug vechi pe IE <=8 face ca expresiile funcțiilor denumite să scurgă identificatorul numelui în scopul său înconjurător, în plus, creând două obiecte funcție, de exemplu:
var foo = function bar() {};
typeof bar; // "function" on IE
foo === bar; // false, two different objects
Pentru a evita efectele secundare ale acestei erori există mai multe soluții alternative, de exemplu, să lucrați într-o funcție apelată imediat, să creați o declarație de funcție în cadrul acelui domeniu și să o returnați, de exemplu:
jQuerySub.fn.init = (function () {
function init( selector, context ) {
//...
}
return init;
})();
Și alte modalități similare, v-aș recomanda să verificați următorul articol:
- Funcția Nominată Demistificată

