Hirdetés
- Yettel topik
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Xiaomi 15T - reakció nélkül nincs egyensúly
- Mi nincs, grafén akku van: itt a Xiaomi 11T és 11T Pro
- Vivo X300 Pro – messzebbre lát, mint ameddig bírja
- Megtartotta Európában a 7500 mAh-t az Oppo
- Samsung Galaxy S21 FE 5G - utóirat
- Akciófigyelő: Százezer forint engedmény a Nothing Phone (3)-ra
- Android alkalmazások - szoftver kibeszélő 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
- Apple iPhone 15 Pro Max 256GB, Kártyafüggetlen, 1 Év Garanciával
- BONTATLAN Lenovo ThinkCentre M70s SFF Business Időtálló Asztali gép -40% i5-14500 16/512 770 Magyar
- 1db DELL P2421 + 1db P2423 1920x1200 IPS monitor, állítható magasság PIVOT is, 16:10 képarány!
- AKCIÓ!! Alienware m16 r1 AMD Laptop , RTX 4080 , R9 7845HX , 32GB DDR5 , 2TB
- GIGABYTE AORUS Radeon RX 580 8GB - MINDEN TARTOZÉKÁVAL.
- HIBÁTLAN iPhone 13 Pro Max 256GB Sierra Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3958, 100% Akksi
- Shure Podcast mikrofon
- DELL PowerEdge R630 rack szerver - 2xE5-2650v3 (20 mag / 40 szál, 2.3/3.0GHz), 32GB RAM, 55992Ft+ÁFA
- HIBÁTLAN iPhone 13 Mini 128GB Red -1 ÉV GARANCIA - Kártyafüggetlen, MS3838, 100% Akksi
- Azonnali készpénzes AMD Radeon RX 9000 sorozat videokártya felvásárlás személyesen/csomagküldéssel
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest



