Kaikki tehdä suunnilleen sama asia, muutamia hienoisia eroja:
on Olemassa ero funktion nimi ja muuttuja funktio on määritetty. Funktion nimeä ei voi muuttaa, kun taas muuttuja, jolle funktio on osoitettu, voidaan siirtää. Funktion nimeä voidaan käyttää vain funktion kehossa. Yrität käyttää sitä ulkopuolella toiminto on kehon aiheuttaa virheen (tai undefined
jos funktion nimi oli aiemmin ilmoittanut kautta var
statement)., Esimerkiksi:
var y = function x() {};alert(x); // throws an error
funktion nimi tulee näkyviin myös, kun toiminto on sarjoitettu kautta Function
’s-toString-metodi.
toisaalta muuttujaa, jolle funktio on osoitettu, rajoittaa vain sen soveltamisala, johon taatusti sisältyy se soveltamisala, jossa funktio ilmoitetaan.
4. esimerkki osoittaa, funktion nimi voi olla eri muuttujan funktio on määritetty. He eivät ole sukua toisilleen. Toiminto-ilmoitus luo myös muuttuja, jolla on sama nimi kuin funktion nimi., Näin ollen, toisin kuin ne on määritelty toiminto ilmaisuja, toimintoja määritelty toiminto ilmoitusten pääsee niiden nimi laajuus ne oli määritelty:
– toiminto on määritelty ’new Function'
ei ole funktion nimi. SpiderMonkey JavaScript-moottorissa funktion serialisoitu muoto näyttää kuitenkin siltä kuin sillä olisi nimi ”anonymous”. Esimerkiksi alert(new Function())
ulostulot:
function anonymous() {}
Koska funktio todella ei ole nimeä, anonymous
ei ole muuttuja, jota voidaan käyttää sisällä toiminto., Esimerkiksi seuraavat johtaisi virheilmoituksen:
var foo = new Function("alert(anonymous);");foo();
toisin Kuin tehtävät on määritelty toiminto ilmaisuja tai Function
rakentaja, funktio määritelty tehtävä ilmoitus voidaan käyttää ennen tehtävä ilmoitus itse. Esimerkiksi:
foo(); // alerts FOO!function foo() { alert('FOO!');}
toiminta määritellään funktion lauseke tai funktio ilmoitus perii nykyinen laajuus. Eli funktio muodostaa sulkemisen., Toisaalta Function
constructor määrittelemä funktio ei peri mitään muuta soveltamisalaa kuin globaalin soveltamisalan (jonka kaikki funktiot perivät).
Tehtävät on määritelty toiminto ilmaisuja ja ilmoitukset-toiminto on jäsennetty vain kerran, kun ne on määritelty Function
rakentaja ole. Että on, toiminto kehon merkkijono välitetään Function
rakentajan on jäsentää jokainen kerta rakentajan on nimeltään., Vaikka funktion lauseke luo sulkeminen joka kerta, toiminto kehon ei ole reparsed, joten toiminta ilmaisuja ovat edelleen nopeammin kuin ”new Function(...)
”. Siksi Function
constructoria tulisi yleensä välttää aina, kun se on mahdollista.
olisi huomattava, kuitenkin, että toiminto ilmaisuja ja toiminto ilmoitusten sisäkkäin toiminto tuottama jäsennys Function constructor
’s merkkijono eivät jäsentää toistuvasti. Esimerkiksi:
tehtävä ilmoitus on hyvin helposti (ja usein tahattomasti) muuttui funktiolauseke., Toiminto vakuutus lakkaa olemasta, kun se joko:
- tulee osa ilmaisua
- ei ole enää ”source element” toiminto tai käsikirjoituksen itse. ”Source element” on ei-sisäkkäisiä lausunnon skripti tai funktio kehon: