Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
Zajímalo by mě využití, fungování a smysl funkce, která je obsahem proměnné.
Tady je to co myslím: var funkce = function(param) { // Do something with param }; Je to k něčemu užitečné? Díky za odpovědi. EDIT: Možná lépe řečeno, k čemu slouží proměnná, která obsahuje funkci? |
||
Alphard Profil |
quatzael:
„Je to k něčemu užitečné?“ Velmi. Takhle si můžeš nechat funkci vrátit funkcí nebo ji předat jiné funkci. Javascriptová specifika neznám, ale obecně o konceptu viz en.wikipedia.org/wiki/Anonymous_function. |
||
marizikmund Profil |
#3 · Zasláno: 28. 6. 2015, 14:04:28
Pokud to bereš z hlediska vytvoření funkce, máš tři možnosti:
Function declaration: function myFunction(a, b) { return a * b; } Function expression: var x = function (a, b) {return a * b}; Function constructor: var myFunction = new Function("a", "b", "return a * b"); Poslední možnost asi moc nevyužiješ. U prvních dvou je hlavně rozdíl v tzv. hoistingu a to tak, že function declaration můžeš udělat kdekoliv v souboru (klidně až za tím řádkem, kdy ji voláš), a vše proběhne v pořádku. Ale pokud vytvoříš funkci přes function expression, musíš tak udělat ještě před tím, než ji budeš volat, protože jinak bude znám během jejího volání jen její název, ale ne obsah, více zde. A k čemu je to dobré? Často se tak vkládají callbacky, neboli funkce, které se vykonají, až původní funkce doběhne. Využívá se toho, že jsou v JavaScriptu funkce tzv. first-class-citizens. |
||
quatzael Profil |
#4 · Zasláno: 28. 6. 2015, 15:42:20
Alphard, marizikmund:
Díky moc za odpovědi. |
||
Radek9 Profil |
Ještě bych doplnil, že je to taky kvůli tomu, že všechno v JS je objekt (až na primitivní typy, ale i ty se tak trochu chovají), i funkce. Takže ji můžeš předávat stejně jako cokoli jiného. Podobným způsobem třeba definuješ metody na prototypu nějakého konstruktoru.
|
||
Chamurappi Profil |
#6 · Zasláno: 28. 6. 2015, 16:40:46
Reaguji na marizikmunda:
„Function constructor“ Ten ani nemá cenu zmiňovat, je to jen eval ová varianta funkčního výrazu.
Ještě bych zmínil, že to, že je funkce vytvořená normálně deklarací, neznamená, že ji nejde za běhu přepsat funkčním výrazem (nebo nějakou úplně jinou hodnotou). Ten rozdíl v hoistingu je jediný rozdíl, nejen hlavní. |
||
_es Profil |
Chamurappi:
„Ten rozdíl v hoistingu je jediný rozdíl, nejen hlavní.“ Ešte je rozdiel v tom, že deklarácie funkcií by nemali byť v podmienene spúšťaných blokoch - ak sú, tak sa to v rôznych prehliadačoch môže chovať rôzne: http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-4-deklarace-funkce-a-funkce-jako-vyraz/. Pre príkaz var ten problém nenastáva. Premenná f existuje pred aj po príkaze if(false) var f; , no nemusí existovať pred ani po príkaze if(false) function f(){}; a v tých prehliadačoch, kde existuje, sa to asi tiež nemusí správať rovnako. A funkčne sa líši aj príkaz if(true) function f(){}; z hľadiska existencie a hodnoty f pred a za príkazom.
|
||
Časová prodleva: 9 let
|
0