Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Небольшой код с анонимной функцией. Скажите каким образом при выводе сообщения через 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, 22:41   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,501
Репутация: 2073
По умолчанию

Цитата:
Сообщение от 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, 23:37   #3
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 47
Репутация: 10
По умолчанию

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

Код:

myAlert('John');

Результат вывода будет : Hello John

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

Код:

myFunc("Mike");


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

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

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

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

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

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

Рассмотрим пример:
Код:

function sum(a){
  alert(100+a);
}
sum(5);

Кто и во что здесь превращается/заменяется?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 27.10.2018, 00:58   #5
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 47
Репутация: 10
По умолчанию

Код:

function sum(a){
  alert(100+a);
}
sum(5);

Здесь параметр функции в вашем примере переменная, а здесь параметр функции - функция.
Код:

helloMike(myAlert);


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

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

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

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

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

Код:

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 в 01:41.
usa-1450 вне форума   Ответить с цитированием
Старый 27.10.2018, 01:49   #8
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,501
Репутация: 2073
По умолчанию

Цитата:
Сообщение от 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, 02:39   #9
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 47
Репутация: 10
По умолчанию

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

Код:

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


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

Просто автор слишком вольготно для такого новичка, как вы, написал. Если есть функция
Код:

function f(a){
  ...
}

и переменная
Код:

var r = 4;

или
Код:

var d = [ 's', 'd' ];

то можно сказать, что в выражении
Код:

f(r);

мы передаем четверку, а в
Код:

f(d);

массив. Но по факту и r, и d остаются переменными.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анонимная отправка почты. Нужно протестить прогу 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


12:14.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru