Анонимная функция
Небольшой код с анонимной функцией. Скажите каким образом при выводе сообщения через 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? |
Если написать вот так:
Код:
myAlert('John'); Смущает вот эта строка: Код:
myFunc("Mike"); здесь получается myFunc("Mike") меняется на myAlert('Mike'); ? Просто никогда не передавал функции в качестве параметров. |
параметр функции это как "псевдоним" переменной или объекта внутри этой функции.
вот простой пример. var a = 10; var b = 5; function fn(b){ alert(b); } fn(a); и для того чтобы проще воспринимать переделал ваш. (function helloMike(myFunc) { return (function(name) { alert("Hello " + name); })("Mike"); })(); |
Каким образом я вызываю несуществующую функцию с именем myFunc("Mike")? Он определяется после того когда получает в качестве аргумента другую функцию с именем myAlert?
|
myFunc это и есть псевдоним для myAlert внутри функции helloMike
|
usa-1450,
Думайте как компьютер, выполняющий программу. Сначала вызывается: helloMike(myAlert); Что у нас в переменной myAlert? Там функция с алертом. Далее смотрим определение функции: helloMike(myFunc) т.е. переданный параметр сохранён в переменной myFunc, который затем выполняется как вызов функции с параметром: myFunc("Mike"); Таким образом в конечном итоге выполняется: alert("Hello " + "Mike"); |
То есть по сути мы вызываем функцию myAlert('Mike')
только внутри функции helloMike? |
да
|
Часовой пояс GMT +3, время: 00:41. |