Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Анонимная функция (https://javascript.ru/forum/css-html/75651-anonimnaya-funkciya.html)

usa-1450 26.10.2018 21:10

Анонимная функция
 
Небольшой код с анонимной функцией. Скажите каким образом при выводе сообщения через 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?

usa-1450 26.10.2018 22:28

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

Код:

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

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

Код:

myFunc("Mike");

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

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

j0hnik 26.10.2018 23:34

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

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

и для того чтобы проще воспринимать переделал ваш.
(function helloMike(myFunc) { 
	return (function(name) { 
		alert("Hello " + name); 
	})("Mike");         
})();

usa-1450 26.10.2018 23:57

Каким образом я вызываю несуществующую функцию с именем myFunc("Mike")? Он определяется после того когда получает в качестве аргумента другую функцию с именем myAlert?

j0hnik 27.10.2018 00:13

myFunc это и есть псевдоним для myAlert внутри функции helloMike

Белый шум 27.10.2018 00:40

usa-1450,
Думайте как компьютер, выполняющий программу. Сначала вызывается:
helloMike(myAlert);
Что у нас в переменной myAlert? Там функция с алертом.
Далее смотрим определение функции:
helloMike(myFunc)
т.е. переданный параметр сохранён в переменной myFunc, который затем выполняется как вызов функции с параметром:
myFunc("Mike");
Таким образом в конечном итоге выполняется: alert("Hello " + "Mike");

usa-1450 27.10.2018 19:52

То есть по сути мы вызываем функцию myAlert('Mike')
только внутри функции helloMike?

Белый шум 27.10.2018 22:51

да


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