Hirdetés
- One mobilszolgáltatások
- Poco M8 5G - majd megveszed
- Almás kagylót főznek Cupertinóban
- Realme GT Master Edition - mestermunka
- Milyen okostelefont vegyek?
- Feltűnt az Xperia 1 VIII és 10 VIII az IMEI adatbázisban
- Android alkalmazások - szoftver kibeszélő topik
- Yettel topik
- Okosóra és okoskiegészítő topik
- Google Pixel topik
-
Mobilarena
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Jim-Y
veterán
Na, akkor legalább volt értelme a példának.
Ezt írja a konzolra:
Vagyis
10
10
10
10
10Magyarázat: (ha esetleg valamit rosszul írnék, akkor javítsatok ki többiek, nem szeretném ha valamit az én hibámból jegyezne meg rosszul

1:
for (var i = 1; i < 6; ++i) {
//...
}Ezt az interpreter így értelmezi:
var i = undefined;
for(i = 1; i < 6; ++i) {
//...
}Tehát az i ciklusváltozót felemeli a függvény törzsének elejére, majd undefined-ként deklarálja.
2:
cont.addEventListener('click', function () {
console.log(i);
});Minden click eseményre a cont objektumon/elementen regisztrál egy névtelen függvényt. A lényeges momentum, hogy minden függvény javascriptben látja/tartalmazza az őt körülvevő függvények kontextusát.
function a() {
var i = 10;
function b() {
var j = function() { return 11; };
function c() {
console.log(i); // 10
console.log(j()); //11
}
c();
}
b();
}
a();Az eredeti példánál maradva az anonim függvény látja az őt körülvevő test függvény kontextusát, így az i változót is. Az addEventListener függvényel olyan működést definiálunk, ami valamikor a jövőben fog lezajlani (amikor klikkelünk az elemre), ezért a ciklus már rég végez mire mi az elemre klikkelünk.
3:
amikor végül rányomunk a div-re, az i már a ciklus végén 6, majd egy újabb értékadással i = 10. Ne felejtsük, hogy az összes anonim függvény "cipeli" magával a test függvény kontextusát amiben az i változóhoz már a 10 érték van rendelve, ezért fog 5 x 10-et kiírni a program a konzolra.A megoldás az lehet, ha minden anonim függvénynek/hez egy új kontextus-t rendelünk, amiben az i változó a ciklusban éppen aktuális értéken fog szerepelni.
Példa és megoldás:
var cont = document.querySelector('#container');
function test() {
for (var i = 1; i < 6; ++i) {
(function (i) {
cont.addEventListener('click', function () {
console.log(i);
});
}(i));
}
i = 10;
}
test();A (function() { .. }()); egy új kontextust generál amibe elmentjük az i ciklusváltozó aktuális értékét így az mindig fix marad.
üdv
Új hozzászólás Aktív témák
- One mobilszolgáltatások
- Kormányok / autós szimulátorok topikja
- Azonnali fotós kérdések órája
- Futás, futópályák
- Milyen légkondit a lakásba?
- A kezdet vége: viszlát, Model S!
- Poco M8 5G - majd megveszed
- Almás kagylót főznek Cupertinóban
- sziku69: Szólánc.
- Mesterséges intelligencia topik
- További aktív témák...
- HDD BAZÁR - SATA, IDE - WD, Seagate, Hitachi, Quantum, Samsung
- HP Zbook G6 i7/ 32 GB/ 500GB SSD
- 2021 Dell Precision 5560 (i9-11950H, RTX A2000, 32 GB, 1 TB NVMe, 500 nit 100%sRGB)
- KEYCHRON V1 Max Knob RGB HU - 2.4 GHz Wireless / Bluetooth / USB-C - GATERON KS-3X1 Milky Yellow Pro
- GIGABYTE GeForce VISION RTX 3070 8GB OC GDDR6 256bit LHR (GV-N3070VISION OC-8GD 2.0) Videokártya
- BESZÁMÍTÁS! Asus B560M i5 10500 16GB DDR4 512GB SSD RTX 3060Ti 8GB LIAN LI LANCOOL 207 Digital 650W
- ÁRGARANCIA! Épített KomPhone i5 10400F 16/32GB/64GB RAM RTX 5050 8GB GAMER PC termékbeszámítással
- Ultimate előfizetés akár 4714 Ft/hó áron! Azonnali, automatizált aktiválással, csak Nálam!
- M2 // NVME // 64GB // 128GB// 256GB // 512GB //
- BESZÁMÍTÁS! Lenovo Legion 5 16RX9 Gamer notebook - i7 14650HX 32GB DDR5 1TB SSD RTX 4070 8GB
Állásajánlatok
Cég: Central PC számítógép és laptop szerviz - Pécs
Város: Pécs
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest



