Postoji li ikakva prednost definiranja imena funkcije u "var new_function=function name(){};" u JavaScriptu?
Pokrenuo sam program da bih promijenio neke dijelove svog JavaScript koda kada je došlo do greške u deklaraciji varijable kao funkcije ovako:
var some_function = function name(args){
//do stuff
};
Sam kod radi, ali samo sam se pitao je li u redu ukloniti 'name' za sve funkcije koje nađem ovako (jer to ne bi trebalo pokvariti u drugom problemu koji analizira moj JavaScript) ili bi to moglo imati neku svrhu koju ne mogu vidjeti.
uklanjanje "imena":
var new_function = function(){/*do stuff*/};
Napomena: originalna datoteka u kojoj se to prvi put dogodilo bila je jquery-1.6.4.js u:
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 );
};
Hvala unaprijed na bilo kakvoj pomoći :)
Odgovor #1
Identifikator name funkcijskih izraza dostupan je samo unutar same funkcije.
U vašem jQuery primjeru init identifikator se čak ni ne koristi, pa mislim da je jedina prednost davanja imena funkciji samo za potrebe otklanjanja pogrešaka, debugger će moći prikazati ime funkcije u dugom nizu poziva.
Usporedi :
Protiv
Postoje nedostaci, dugogodišnja greška u IE <=8 uzrokuje da imenovane funkcijske izraze propuštaju ime identifikatora u njihov okolni opseg, štoviše, stvarajući dva funkcijska objekta, na primjer:
var foo = function bar() {};
typeof bar; // "function" on IE
foo === bar; // false, two different objects
Kako bi se izbjegli neželjeni učinci ovog buga, postoji nekoliko zaobilaznih rješenja, na primjer, rad unutar odmah pozvane funkcije, kreiranje deklaracije funkcije unutar tog opsega i njezino vraćanje, npr.:
jQuerySub.fn.init = (function () {
function init( selector, context ) {
//...
}
return init;
})();
I na druge slične načine, preporučio bih vam da provjerite sljedeći članak:
- Nazvana funkcija objašnjena

