Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.12.2017, 20:07
Интересующийся
Отправить личное сообщение для ArtyomZaitsev Посмотреть профиль Найти все сообщения от ArtyomZaitsev
 
Регистрация: 29.11.2017
Сообщений: 11

Объясните, пожалуйста, логику примера
Пожалуйста, объясните логику этого примера, не могу совсем разобраться.
Сначала мы вызываем функцию setupHelp(), у нас в ней есть массив объектов, есть счетчик. В счетчике мы от i=0 до i=2 записываем в переменную item объекты из массива helpText. Дальше строка описывает действие, которое запускает функцию makeHelpCallback(), в данном случае onfocus. Затем мы вызываем функцию makeHelpCallback(), которая запускает функцию showHelp(). Вопросы:
-почему это работает?
-как счетчик запоминает (и куда) что делать, если мы взяли в фокус поле ввода? Разве он не должен проработать от 0 до 2 и забыться?
function showHelp(help) {
  document.getElementById('help').innerHTML = help;
}

function makeHelpCallback(help) {
  return function() {
    showHelp(help);
  };
}

function setupHelp() {
  var helpText = [
      {'id': 'email', 'help': 'Ваш адрес e-mail'},
      {'id': 'name', 'help': 'Ваше полное имя'},
      {'id': 'age', 'help': 'Ваш возраст (Вам должно быть больше 16)'}
    ];

  for (var i = 0; i < helpText.length; i++) {
    var item = helpText[i];
    document.getElementById(item.id).onfocus = makeHelpCallback(item.help);
  }
}

setupHelp();
Ответить с цитированием
  #2 (permalink)  
Старый 06.12.2017, 22:29
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,498

Сообщение от ArtyomZaitsev Посмотреть сообщение
...Дальше строка описывает действие, которое запускает функцию makeHelpCallback(), в данном случае onfocus.
Нет. Тогда было бы:
document.getElementById(item.id).onfocus = makeHelpCallback;
В данном случае мы вызываем makeHelpCallback на месте, с нужным параметром и вешаем на onfocus возвращённый результат, т.е.
function() {
    showHelp(help);
};
где help - сохранённый в замыкании параметр, переданный в функцию makeHelpCallback.
__________________
29375, 35

Последний раз редактировалось Aetae, 06.12.2017 в 22:31.
Ответить с цитированием
  #3 (permalink)  
Старый 07.12.2017, 02:35
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

document.getElementById(item.id).onfocus = makeHelpCallback.bind(null, item.help);
Ответить с цитированием
  #4 (permalink)  
Старый 07.12.2017, 19:30
Интересующийся
Отправить личное сообщение для ArtyomZaitsev Посмотреть профиль Найти все сообщения от ArtyomZaitsev
 
Регистрация: 29.11.2017
Сообщений: 11

спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните пожалуйста imediasun1 Элементы интерфейса 0 23.03.2013 16:59
Объясните, пожалуйста мне, что такое значение reference dump Общие вопросы Javascript 1 21.07.2012 18:31
Пожалуйста, объясните что мне сделать с этим... someLogin Events/DOM/Window 2 16.10.2011 22:47
Объясните пожалуйста как обратится к функции и получить результат zeraid AJAX и COMET 4 03.04.2011 14:55
Объясните пожалуйста значение символов после переменной Анатолий Общие вопросы Javascript 1 09.01.2009 03:50