Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.10.2018, 21:10
Аспирант
Отправить личное сообщение для usa-1450 Посмотреть профиль Найти все сообщения от usa-1450
 
Регистрация: 10.01.2015
Сообщений: 31

Анонимная функция
Небольшой код с анонимной функцией. Скажите каким образом при выводе сообщения через alert к Hello добавляется Mike?

<script>
var myAlert = function(name) { 
alert("Hello " + name); 
} 
function helloMike(myFunc) {  
myFunc("Mike");         
} 
helloMike(myAlert); 

</script>


Что здесь происходит?
1) Вначале переменная myAlert получает результат вызова анонимной функции или она просто получает имя функции, превращаясь с анонимной в именную? То есть эта анонимная функция делается такой в результате после присвоения ее переменной?

function myAlert(name) { 
alert("Hello " + name); 
}


2) После этой строки кода helloMike(myAlert);
Анонимная функция которая превратилась в именную функцию передается в качестве параметра функции helloMike
и строка
myFunc("Mike");

заменяется после передачи функции в качестве параметра на эту строку

helloMike(myAlert)?

3) Каким образом происходит объединение Hello c Mike?
Ответить с цитированием
  #2 (permalink)  
Старый 26.10.2018, 22:28
Аспирант
Отправить личное сообщение для usa-1450 Посмотреть профиль Найти все сообщения от usa-1450
 
Регистрация: 10.01.2015
Сообщений: 31

Если написать вот так:

Код:
myAlert('John');
Результат вывода будет : Hello John

Смущает вот эта строка:

Код:
myFunc("Mike");

здесь получается myFunc("Mike") меняется на myAlert('Mike'); ?

Просто никогда не передавал функции в качестве параметров.

Последний раз редактировалось usa-1450, 26.10.2018 в 22:50.
Ответить с цитированием
  #3 (permalink)  
Старый 26.10.2018, 23:34
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

параметр функции это как "псевдоним" переменной или объекта внутри этой функции.
вот простой пример.
var a = 10;
var b = 5;

function fn(b){
alert(b);
}
fn(a);

и для того чтобы проще воспринимать переделал ваш.
(function helloMike(myFunc) { 
	return (function(name) { 
		alert("Hello " + name); 
	})("Mike");         
})();
Ответить с цитированием
  #4 (permalink)  
Старый 26.10.2018, 23:57
Аспирант
Отправить личное сообщение для usa-1450 Посмотреть профиль Найти все сообщения от usa-1450
 
Регистрация: 10.01.2015
Сообщений: 31

Каким образом я вызываю несуществующую функцию с именем myFunc("Mike")? Он определяется после того когда получает в качестве аргумента другую функцию с именем myAlert?
Ответить с цитированием
  #5 (permalink)  
Старый 27.10.2018, 00:13
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

myFunc это и есть псевдоним для myAlert внутри функции helloMike
Ответить с цитированием
  #6 (permalink)  
Старый 27.10.2018, 00:40
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

usa-1450,
Думайте как компьютер, выполняющий программу. Сначала вызывается:
helloMike(myAlert);
Что у нас в переменной myAlert? Там функция с алертом.
Далее смотрим определение функции:
helloMike(myFunc)
т.е. переданный параметр сохранён в переменной myFunc, который затем выполняется как вызов функции с параметром:
myFunc("Mike");
Таким образом в конечном итоге выполняется: alert("Hello " + "Mike");
Ответить с цитированием
  #7 (permalink)  
Старый 27.10.2018, 19:52
Аспирант
Отправить личное сообщение для usa-1450 Посмотреть профиль Найти все сообщения от usa-1450
 
Регистрация: 10.01.2015
Сообщений: 31

То есть по сути мы вызываем функцию myAlert('Mike')
только внутри функции helloMike?
Ответить с цитированием
  #8 (permalink)  
Старый 27.10.2018, 22:51
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анонимная функция Tanya51 Общие вопросы Javascript 9 30.07.2017 01:56
Функция вызывается несколько раз KiberQ Общие вопросы Javascript 11 01.03.2017 15:45
Анонимная функция в обработчике события rolleyes Javascript под браузер 0 02.12.2015 13:05
Анонимная функция в условии Petesso Общие вопросы Javascript 9 28.09.2014 21:13
AJAX функция для новых html-элементов broadcast77 AJAX и COMET 25 03.03.2014 14:01