Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с видимостью переменной (https://javascript.ru/forum/misc/58442-problema-s-vidimostyu-peremennojj.html)

Alpunto 22.09.2015 11:34

Проблема с видимостью переменной
 
Пытаюсь создать несколько Event Listenerв цикле:

var cssArr = ["f1", "f2", "f3"];

for (var i = 0; i < cssArr.length; i++){
    var cssCur = cssArr[i];
    var cb = function(){ 
        console.log(cssCur);
    }   
    window.addEventListener('load', cb);
}


На выходе хочу получить три Event Listener с тремя различными значениями, но у меня на выходе в консоли всегда три строки "f3".

Пробовал делать разными способами, пробовал делать через замыкание, но не получается. Я так понимаю, здесь проблема с областью видимости или я чего-то недопонимаю. Подскажите, в чем именно здесь проблема?

рони 22.09.2015 11:57

Alpunto,
Пример ошибочного использования

Alpunto 23.09.2015 06:50

Спасибо. Также нашел ответ в книге "Подробное руководство".

Это рабочий код:

var cssArr = ["f1", "f2", "f3"];

for (var i = 0; i < cssArr.length; i++){
    var cb = createListeners(cssArr[i]);
    window.addEventListener('load', cb);
}

function createListeners (cssCur){
	return function (){
		console.log(cssCur);
	};
}


Часовой пояс GMT +3, время: 06:24.