Hirdetés
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Milyen billentyűzetet vegyek?
- Milyen HASZNÁLT notebookot vegyek?
- Milyen notebookot vegyek?
- Bluetooth hangszórók
- Most Kína tiltotta ki a nemrég exportengedélyt kapott AI gyorsítókat?
- Apple MacBook
- nVidia GeForce RTX 2070 (TU106)
- Fujifilm X
-
PROHARDVER!
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
- Csúcskategóriás gamer fenevad: ASUS ROG Strix Scar G733QS (Ryzen 9, RTX 3080, 32gb ram/1tb ssd)
- Huawei Watch GT5 Pro 2027.04.15.-ig Garis!
- szinte új Apple Watch Ultra 2 GPS + Cellular 49 mm fekete titántok titán milánói szíj 1 év garancia
- újszerű Apple Watch Series 10 GPS 42mm kozmoszfekete alumíniumtok fekete Apple garancia
- E14 Gen5 14" FHD+ IPS i7-1355U 16GB 512GB NVMe ujjlolv IR kam gar
- Lenovo ThinkPad X1 Yoga G6 (6th Gen) - i7-1185G7, 32GB, 512GB SSD, multitouch + TOLL
- iKing.Hu - Honor Magic V2 Black Használt, karcmentes állapotban 16 GB RAM / 512 GB tárhely
- Legjobb kijelzős! ThinkPad T14s Gen 2 i5-1135G7 16GB 1000GB FHD 1 év garancia
- BESZÁMÍTÁS! 6TB Western Digital WD RED SATA HDD meghajtó garanciával hibátlan működéssel
- BESZÁMÍTÁS! MSI Z87-G43 GAMING Z87 chipset alaplap garanciával hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest