functionfoo(/* foo params */) {/* function body */}foo(/* foo args */) // вызов foo
if no return, function returns undefined
стрелочная
(/*params*/) =>/*return*/
или
((/*params*/) =>/*return*/ ) (/*args*/);
constfoo= ((a, b) => a + b ) (3,4);console.log(foo); // 7
вложеннная
functionfoo() {/* foo() start */functionbar() {/* bar() start */functionbaz() {/* baz() start *//* baz() end */ }/* bar() end */ }bar()/* foo() end */}// Результат выполнения bar неизвестен, т.к. bar не вызывается, ведь мы не вызывали foo.
еще пример
functionfoo(a) {return (function (b) {return b; })(a);}foo(10);// result foo = 10// args foo = 10// args of anonymous function = 10
functionfoo(a1, b2) {return a1 + b2; // результат выполнения функцииconsole.log('hi'); // это уже мусорный код}console.log(foo()); // чтобы узнать, что вернула функция - вызови ее в консоли// Аргументы у функций становятся чем-то конкретным ТОЛЬКО в момент её вызоваconsole.log(foo(2,5));consts=foo() +7;console.log(s);
functionstart(num) {for (let i = num; i >=1; i--) {console.log(i); }return'Поехали!';}console.log(start(5));