Hirdetés
- Komoly kihívót küldött a konkurenciára a Honor
- Honor Magic6 Pro - kör közepén számok
- Milyen okostelefont vegyek?
- Fotók, videók mobillal
- Honor Magic8 Lite - a félig sikerült bűvésztrükk
- Samsung Galaxy Z Flip6 - színt lép
- Messze nyolcezer fölött!
- Megérkezett a Google Pixel 7 és 7 Pro
- uleFone Power
- Így nézhet ki a Huawei Pura 90
-
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
- HP Victus 16 - 16.1"FHD 144Hz - Ryzen 5 7640HS - 32GB - 1TB - Win11 -RTX 4050 - 1,5 év gari - MAGYAR
- SAPPHIRE NITRO+ AMD Radeon RX 7900 XT Vapor-X 20G
- ÚJ BONTATLAN Apple Watch Series SE3 40mm Stairlight Azonnal Átvehető DEÁK TÉRNÉL 1 Év Apple Garancia
- G.SKILL Aegis 16GB (2x8GB) DDR4 3200MHz F4-3200C16D-16GIS új 2 pár
- Lenovo MIIX 520-12IKB, Magyar bill, i5-8250 8Gb ram, 256Gb nvme, számla, garancia 2in1
- DELL Precision 5540 Workstation i7-9850H Nvidia Quadro T1000 32GB 1000GB 15.6" 1 év garancia
- iPhone 11 Pro 256Gb
- HIBÁTLAN iPhone 17 Pro 256GB Silver -1 ÉV GARANCIA - Kártyafüggetlen, MS4464, 100% Akkumulátor
- 164 - Lenovo Legion Pro 7 (16IRX9H) - Intel Core i9-14900HX, RTX 4090
- Apple iPhone 12 Mini 128 GB Fekete 1 év Garancia Beszámítás Házhozszállítás
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: Central PC számítógép és laptop szerviz - Pécs
Város: Pécs



