Цитата:
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
спасибо, за столь интенсивную дисскусию. Постепенно всё встаёт на свои места в моей голове.
|
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 }); |
потому что "чисто" внутри функции sayHi alert-а нету, но есть в возвращаемой (а не запускаемой) функции => чтобы вызвать alert надо написать sayHi()();
|
И обрамляй код в тег JS, читать невозможно.
|
Цитата:
Var call = sayHi({ name: 'LOL', age: 17 }); call(); Каким образом это аналог sayHi()(); ? |
ну для начала, я немного тупанул, чтобы вызвать alert надо написать sayHi({ name: 'LOL', age: 17 })(); а аналог тем, что
Var call = sayHi({ name: 'LOL', age: 17 });//call - ссылка на возвращаемую ф-ю call();//её запуск sayHi({ name: 'LOL', age: 17 })();//получение результата из sayHi т.е. ф-и и ТУТ ЖЕ её запуск |
Часовой пояс GMT +3, время: 07:45. |