Autor Zpráva
simonik
Profil *
Může mi někdo, prosím, vysvětlit, jak toto pracuje?
Jak se tam dostane parametr postsSuffix?
Díky

function example5() {   
    var myFnct = getFunctionExample5("Just kidding.");   
    //can you see? getFunctionExample5 method scope is closed now   
    //but we can still access local variable name of that scope via closure   
    //in example we are mixing even method parameters   
    myFnct("No, no - I am serious.");   
}   
  
function getFunctionExample5(suffix) {   
    var name = "Father Fourah";   
    return function(postSuffix) {alert(name + " rulez!\n" + suffix + "\n" + postSuffix)};   
}

Moderátor Str4wberry: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
_es
Profil
simonik:
Jak se tam dostane parametr postsSuffix?

Funkcia getFunctionExample5 vracia funkciu s jedným vstupným argumentom nazvaným postSuffix, ktorý je v tej funkcii jeden krát použitý.
simonik
Profil *
_es:
Diky. Snažím se pochopit closure. Našel jsem tu v diskusi ještě tento kod :

for(var i=0; stylNameArray.length>i; i++) {
   (function(){
     var n = i;
     neco[i].onclick = function() {
      zmenaStylu("styl_pozadi_oken_0" + n);
    }
   })();
} 

Nejde fungování closure nějak lidsky popsat?
_es
Profil
simonik:
Nejde fungování closure nějak lidsky popsat?

Používa sa aj český názov "lexikální uzávěr".
Skús si o tom niečo pohľadať.
Niektoré "ľudské" popisy to však skôr popíšu tak, že to ešte viac domotajú.
Jednoducho povedané, ide o využitie vlastností vnorených funkcii.
Tie majú prístup k premenným funkcie, do ktorej sú vnorené.
Ak funkcia už skončí, no tá vnorená funkcia ešte existuje, tak aj tie premenné ďalej existujú.
Jednoduchá ukážka:
var f = (function(){ var n = 0; return function(){return n++; }; })();
Tá nepomenovaná funkcia skončí, no tá vnorená funkcia existuje ďalej, lebo je zapísaná v premennej f a tak isto existuje ďalej aj premenná n.
Preto bude volanie funkcie f vracať postupne hodnoty: 0, 1, 2, ...

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0