Показать сообщение отдельно
  #6 (permalink)  
Старый 14.02.2018, 01:44
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

Магия.)

function(scale){...}(scale)
создаём анонимную функцию и тут же на месте её вызываем с параметром scale. Теперь есть отдельный внешний scale и есть отдельный scale как параметр функции.
return function(){ faunaAdd(scale);}
Создаём ещё одну анонимную функцию и возвращаем её как результат предыдущей. Это новосоданная функция замыкает на себя внутренний scale, к которому больше никто не имеет доступа кроме неё, после самовыполнения вышестоящей функции.
Т.о. в addEventListener попадет тот же самый
function(){ faunaAdd(scale); }
только scale в нём теперь отдельный.

Чтоб понятнее, можно записать так
function getFaunaAddWithScale(innerScale){
  return function(){
    faunaAdd(innerScale);
  }
}
var faunaAddWithScale = getFaunaAddWithScale(scale);

g.addEventListener("click", faunaAddWithScale );


Собсно тут работает тот же самый механизм замыканий, что и мешал вам. Только у вас замыкалась внешняя переменная, которая со временем менялась, а тут замыкается, так сказать, персональная, неизменная.)
__________________
29375, 35

Последний раз редактировалось Aetae, 14.02.2018 в 01:51.
Ответить с цитированием