Показать сообщение отдельно
  #16 (permalink)  
Старый 30.09.2014, 13:12
Интересующийся
Отправить личное сообщение для extrabass4 Посмотреть профиль Найти все сообщения от extrabass4
 
Регистрация: 25.06.2014
Сообщений: 20

function sayHi(person) {

var message = makeMessage(person); // (**)
alert( message );

function getHello(age) {
return age >= 18 ? 'hello' : 'hi';
}
function makeMessage() {
return getHello(person.age) + ', ' + person.name;
}
}

var say = sayHi({ name: 'LOL', age: 17 }); (*)

В этом примере функция не возвращает функцию, поэтому как я понимаю происходит следующее: как только до неё доходит интепритатор в коде (*) она сразу же выполняется и срабатывает встроенная функция alert - даже при таком вызове sayHi({ name: 'LOL', age: 17 }); в строке (*).

Но собственно,если function sayHi(person) возвращает функцию, то всё иначе:

function sayHi(person) {

return function() {
var message = makeMessage(person); // (**)
alert( message );
};

function getHello(age) {
return age >= 18 ? 'hello' : 'hi';
}
function makeMessage() {
return getHello(person.age) + ', ' + person.name;
}
}

// (*)
var call = sayHi({ name: 'LOL', age: 17 });
call();

Вызвать функцию можно только таким способом, как в (*) сперва
создав переменную ссылающуюся на функцию var call = sayHi({ name: 'LOL', age: 17 }); и передав в неё аргументы.

Но почему же нельзя просто вызвать её так sayHi({ name: 'LOL', age: 17 }); ? ведь при Function declaration имя функции sayHi это переменная ссылающаяся на функцию ?
Ведь если даже в первом примере сделать,чтоб функция return alert( message ); ? , то вызвать можно так: sayHi({ name: 'LOL', age: 17 });
Ответить с цитированием