Autor Zpráva
weroro
Profil
Ahoj,

V IE9 mi z nejakého dôvodu, nechce prijať tretí argument funkcie setInterval.

var mojInterval = setInterval(function (fc) {
                        console.log(typeof fc);
                    }, 1000, fc);
Z nejakého dôvodu, mi ale stále vypisuje undefined. Viete prosím poradiť?

Ďakujem.
Radek9
Profil
weroro:
IE to umí až od verze 10. Pokud ti to stačí od verze 9, použij bind:
var mojInterval = setInterval(function (fc) {
  console.log(typeof fc);
}.bind(null, fc), 1000);
weroro
Profil
Radek9:
Vynikajúce, ďakujem za tvoj čas a riešenie.
_es
Profil
weroro:
O čo sa tým kódom vlastne snažíš? Ak je v tom kóde dostupná premenná fc ako tretí argument setInterval, tak môže byť dostupná aj v tej vnorenej funkcii. Načo ju „prekrývaš“ lokálnou premennou funkcie s rovnakým názvom? Nestačí jednoduché?:
var mojInterval = setInterval(function(){console.log(typeof fc)}, 1000);
weroro
Profil
_es:
Ten interval mám ešte v jednej funckii, do ktorej argumentu predávam funkciu a túto funkciu potrebujem ešte predať do toho intervalu.

function onEnterFrame (fc, intervalName) {
    if (intervalName == undefined) {
        intervalName = "EnterFrame";
    }
    if (typeof fc == "function" && !global[intervalName + "oef"]) {
        fps = Math.floor(fps);

        if (fps > 65) { fps = 65; } 
        else if (fps < 1) { fps = 1; }

        if (fps > 0) {
            var interval                     = Math.ceil(1000 / fps);
            global[intervalName]             = setInterval (function (fc) {
                                                                fc ();
                                                                update ();
                                                            }.bind(null, fc), interval);
            global[intervalName + "oef"]     = true;
        }
    } else if ((typeof fc == "string" && fc == "delete") || fc === null) {
        clearInterval(global[intervalName]);
        global[intervalName] = null;
        delete global[intervalName];
        global[intervalName + "oef"] = null;
        delete global[intervalName + "oef"];
    }
}
Chamurappi
Profil
Reaguji na werora:
Nerozumím, k čemu to potřebuješ. Na co tam máš ten bind? Proč fc potřebuješ předávat dovnitř funkce, když ta vidí na to vnější fc?
weroro
Profil
Chamurappi:
Keď tak teraz na to pozerám, už ani ja neviem prečo to chcem ak sa dá k tej funkcii dostať takto jednoducho.
Radek9
Profil
weroro:
Původně jsem předpokládal, že tohle je vážně jen ukázka a že ta funkce je třeba definována jinde a k proměnné nemá přístup. Jestli je to ale takhle, tak to opravdu nepotřebuješ. Má to smysl, pokud mám někde definovanou univerzální funkci a tu pouštím v několika intervalech nebo timeoutech s různými parametry.

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: