Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2018, 21:23   #1
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 70
По умолчанию Анонимная функция

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

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

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

Код HTML:
function myAlert(name) { 
alert("Hello " + name); 
} 
2) После этой строки кода helloMike(myAlert);
Анонимная функция которая превратилась в именную функцию передается в качестве параметра функции helloMike
и строка
Код HTML:
myFunc("Mike");
заменяется после передачи функции в качестве параметра на эту строку

helloMike(myAlert)?

3) Каким образом происходит объединение Hello c Mike?
usa-1450 вне форума Ответить с цитированием
Старый 26.10.2018, 21:41   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
1) Вначале переменная myAlert получает результат вызова анонимной функции или она просто получает имя функции, превращаясь с анонимной в именную?
А где вы вызов то увидели? Просто объявленна переменная и ее присвоено анонимная функция.

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
То есть эта анонимная функция делается такой в результате после присвоения ее переменной?
Какой такой?

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
Анонимная функция которая превратилась в именную функцию
Никуда она не превращалась

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
передается в качестве параметра функции helloMike
Переменная передается

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
и строка
Код:
myFunc("Mike");
заменяется после передачи функции в качестве параметра на эту строку
Код:
helloMike(myAlert)
?
С какого перепугу? Просто вызывается анонимная функция с параметром.

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
3) Каким образом происходит объединение Hello c Mike?
Код:
alert("Hello " + name);
При name = "Mike" что произойдет?
p51x вне форума Ответить с цитированием
Старый 26.10.2018, 22:37   #3
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 70
По умолчанию

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

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

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

Код:
myFunc("Mike");

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

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

Последний раз редактировалось usa-1450; 26.10.2018 в 23:00.
usa-1450 вне форума Ответить с цитированием
Старый 26.10.2018, 23:49   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
Результат вывода будет
И? Вы чего-то другого ожидали? Для вас результат неожиданность?

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
здесь получается myFunc("Mike") меняется на myAlert('Mike'); ?
Нет. Ничего не меняется.

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
Просто никогда не передавал функции в качестве параметров.
И чем этот случай особенный? Чем это передача отличается от передачи 2 в функцию?

Рассмотрим пример:
Код:
function sum(a){
  alert(100+a);
}
sum(5);
Кто и во что здесь превращается/заменяется?
p51x вне форума Ответить с цитированием
Старый 26.10.2018, 23:58   #5
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 70
По умолчанию

Код:
function sum(a){
  alert(100+a);
}
sum(5);
Здесь параметр функции в вашем примере переменная, а здесь параметр функции - функция.
Код:
helloMike(myAlert);

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

Последний раз редактировалось usa-1450; 27.10.2018 в 00:06.
usa-1450 вне форума Ответить с цитированием
Старый 27.10.2018, 00:21   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
Здесь параметр функции в вашем примере переменная, а здесь параметр функции - функция.
Нет. myAlert - переменная.

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
Каким образом я вызываю несуществующую функцию с именем myFunc("Mike")?
Таким же, как и складываете 100 с "несуществующей" a.

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
Он определяется после того когда получает в качестве аргумента другую функцию с именем myAlert?
Кто он? Кто определяется? Давайте на примере с sum.
p51x вне форума Ответить с цитированием
Старый 27.10.2018, 00:34   #7
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 70
По умолчанию

Код:
function sum(a){
  alert(100+a);
}
sum(5);
Вы создали именную функцию sum c одним параметром в который передали цифру 5 в качестве аргумента.
Внутри функции вы вызвали встроенную в язык JavaScript функцию alert которая получила в переменную а
в качестве аргумента цифру 5 и в итоге 100 сложилось с 5 получилось 105.

Это что касается вашего кода. Теперь что касается моего кода.

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

</script>
У меня передается функция в качестве аргумента, а у вас в качестве аргумента передавалась переменная.

myFunc это и есть псевдоним для myAlert ?

Последний раз редактировалось usa-1450; 27.10.2018 в 00:41.
usa-1450 вне форума Ответить с цитированием
Старый 27.10.2018, 00:49   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
У меня передается функция в качестве аргумента, а у вас в качестве аргумента передавалась переменная.
Я вам в очередной говорю - нет. myAlert - переменная. Можете попробовать поиграться с
Код:
var myAlert = function(name) { 
alert("Hello " + name); 
}
//myAlert = function(name) { 
//alert(5); 
//}
function helloMike(myFunc) {  
myFunc("Mike");         
}
//helloMike = 5
helloMike(myAlert);
Цитата:
Сообщение от usa-1450 Посмотреть сообщение
myFunc это и есть псевдоним для myAlert ?
Еще раз - нет. Это формальный параметр функции. Абсолютно такой же как и a для 5 в моем примере.
p51x вне форума Ответить с цитированием
Старый 27.10.2018, 01:39   #9
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 70
По умолчанию

Вот описание с учебника, детали на фото и там есть комментарий

Код:
function helloMike(myFunc) {   // тут функция передаётся как параметр 
myFunc("Mike");          // а тут мы её вызываем

тут функция передаётся как параметр ,
а вы говорите переменная передается, а не функция.
Изображения
Тип файла: png Снимок.PNG (34.2 Кб, 125 просмотров)
usa-1450 вне форума Ответить с цитированием
Старый 27.10.2018, 11:19   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Просто автор слишком вольготно для такого новичка, как вы, написал. Если есть функция
Код:
function f(a){
  ...
}
и переменная
Код:
var r = 4;
или
Код:
var d = [ 's', 'd' ];
то можно сказать, что в выражении
Код:
f(r);
мы передаем четверку, а в
Код:
f(d);
массив. Но по факту и r, и d остаются переменными.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анонимная отправка почты. Нужно протестить прогу ilim Софт 5 18.03.2013 19:06
Анонимная отправка статистики программы Lardes Работа с сетью в Delphi 1 20.11.2012 16:00
Анонимная Отправка Писем mish@ PHP 5 04.04.2012 15:11
анонимная отправка почты - програма funnycaptain Помощь студентам 4 04.08.2010 12:55
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50