BenderIsGreat34
@BenderIsGreat34
junior front-end

Объясните строчку кода?

<input id="1">
<input id="2">
<input id="3">


document.addEventListener("DOMContentLoaded", function() {
  var ids = ["1", "2", "3"];
	for (var id of ids) {
    var input = document.getElementById(id);
    input.value = localStorage.getItem(id);
    (function(id, input) {
      input.addEventListener("change", function() {
        localStorage.setItem(id, input.value);
      });
    })(id, input);
  } 
});


что обозначает в конце (id, input);?
почему оно идёт после закрытия функции, но перед точкой с запятой?
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
bitniks
@bitniks
Go/PHP/Symfony developer
Таким образом вызывается анонимная функция. Скобками обрамляем анонимную функцию и c помощью (id, input) вызываем её с параметрами id и input
(
function(id, input) {
    input.addEventListener("change", function() {
        localStorage.setItem(id, input.value);
    });
}
)(id, input);

Чтобы было понятно, это можно записать так
var fun = function(id, input) {
    input.addEventListener("change", function() {
        localStorage.setItem(id, input.value);
    });
}

fun(id, input);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
xEpozZ
@xEpozZ
Веб-разработчик
(function - это инициализация анонимной функции.
})(id, input); - здесь идет вызов этой функции, передавая туда 2 аргумента из цикла
id - это переменная, которая инициализирована в for'е
input - это переменная с первой внутренней строчки for'а ( var input = document.getElementById(id);)

Если боитесь, можете переписать это так.
Только в этом случае к myFunction будет иметь доступ как минимум весь скоуп, а как максимум, любой модуль, куда будет подключен этот js файл.
function myFunction (id, input) {
      input.addEventListener("change", function() {
        localStorage.setItem(id, input.value);
      });
}
document.addEventListener("DOMContentLoaded", function() {
  var ids = ["1", "2", "3"];
  for (var id of ids) {
    var input = document.getElementById(id);
    input.value = localStorage.getItem(id);
    myFunction(id, input);
  } 
});
Ответ написан
Комментировать
profesor08
@profesor08 Куратор тега JavaScript
Обозначает передачу параметров в самовызывающуюся функцию function(id, input), которая тут вообще ненужна, и не понятно зачем она там.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы