Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как это работает? )) (https://javascript.ru/forum/misc/67186-kak-ehto-rabotaet.html)

innowed 02.02.2017 15:39

Как это работает? ))
 
недели 2-3 назад спрашивал, как получать доступ к аргументам функции, которая сама передана в качестве аргумента, в итоге получился код:
function fulname(fn) {
  
  fn(getName, getSurname);
  
  function getName(name) {
	  console.log('name is', name);
  }

  function getSurname(surname) {
	  console.log('surname is', surname);
  }
    
};

fulname(function (name, surname) {
  name('petya');
  surname('ivanov');
});

И теперь я не могу понять, как и почему это работает? ))

Dilettante_Pro 03.02.2017 10:31

innowed,
Похоже, вас немного путают одинаковые имена разных объектов.
Посмотрите такой вариант:

function fulname(fn) {
  
  fn(getName, getSurname);
  
  function getName(nm) {
	  console.log('name is', nm);
  }

  function getSurname(snm) {
	  console.log('surname is', snm);
  }
    
};

fulname(function (name, surname) {
  name('petya');
  surname('ivanov');
});

Так понятнее?

innowed 03.02.2017 14:01

я бы не сказал, что имена путают, вообще было вот так изначально
function fulname(fn) {
  
  fn(function(a){
      console.log('name is', a);
  },
  function(b){
      console.log('surname is', b);
  });
  
    
};

fulname(function (name, surname) {
  name('petya');
  surname('ivanov');
});

Не могу осмыслить, почему имя и фамилия так прокидываются

Dilettante_Pro 03.02.2017 14:15

innowed,
При выполнении функции
fulname(function (name, surname) {
  name('petya');
  surname('ivanov');
});

вместо name и surname вызываются и выполняются соответственно getName и getSurname (или первая и вторая функции по варианту пост №3) с параметрами 'petya' и 'ivanov'


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