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