Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему происходит вызов функции (https://javascript.ru/forum/misc/31941-pochemu-proiskhodit-vyzov-funkcii.html)

dmitry111 27.09.2012 00:39

Почему происходит вызов функции
 
Объясните как работает вызов вложенной функции тут:

function f() {
  return function g() {
    alert("sdf");
  };
}
var g = f();
g();


Как бы я логически мыслил: Есть функция f(){ } , есть кнопочка "пуск" - f(); .
Если я создам коробочку - var g и положу туда эту кнопочку, то две там кнопочки не станет :)

Почему происходит вызов вложенной функции?


или тут:

function getFunc() {
  var func = function() { alert("dsf"); };
  return func; 
}
getFunc()(); // А если бы у меня было 2 вложенные функции?


Вызов getFunc()(); непонятен. Почему он вызывает вложенную функцию. А если бы их было 2, 3 и более?

Aetae 27.09.2012 00:47

Не понял, а какого поведения вы ожидаете?

Цитата:

Сообщение от dmitry111 (Сообщение 206718)
А если бы их было 2, 3 и более?

Хоть миллион.
function Rec(){
    return Rec
}
Rec.toString = function(){return '[function Rec]'}

alert( Rec()()()()()()()()()()()()()()()()()()()()()()()() )

=)

ksa 27.09.2012 08:45

dmitry111, функция f() возвращает другую функцию. Т.о.
var g = f();

превращает g в функцию. Далее идет ее вызов...
g()

ksa 27.09.2012 08:48

Сработает и так...

function f() {
  return function () {
    alert("sdf");
  };
}
var g = f();
g();

ksa 27.09.2012 08:51

dmitry111, что есть для тебя вообще "вложеная функция"? :)

dmitry111 27.09.2012 10:57

Aetae,

Имел в виду это:
function getFunc() {
  var func = function() { alert("1"); }; 
    var func2 = function() { alert("2"); };
    var func3 = function() { alert("3"); };
}
      getFunc()/*вызов getFunc*/()/*вызов func*/()/*вызов func2*/()/*вызов func3*/;


Это не работает, знаю) Но хотелось бы понять логику выполнения скрипта интерпретатором

dmitry111 27.09.2012 11:06

Цитата:

Сообщение от ksa
dmitry111, функция f() возвращает другую функцию. Т.о.
var g = f();

превращает g в функцию. Далее идет ее вызов...
g()

То есть получается мы обходим функцию f() и выполняем g()?


function f() {
  return function g() {
    alert("sdf");
  };
}
var g = f();
g();


Тут происходит только вызов вложенной функции? Так?

dmitry111 27.09.2012 11:13

Цитата:

Сообщение от ksa
dmitry111, что есть для тебя вообще "вложеная функция"?

function f() {
  return function g() {
    alert("sdf");
  };
}
var g = f();
g();


в данном примере возвращаемый объект? Нет?

ksa 27.09.2012 11:39

Цитата:

Сообщение от dmitry111 (Сообщение 206769)
Имел в виду это:
function getFunc() {
  var func = function() { alert("1"); }; 
    var func2 = function() { alert("2"); };
    var func3 = function() { alert("3"); };
}

В этом примере внутри функции getFunc просто определяются 3 переменные func, func2 и func3... И ничего более.

ksa 27.09.2012 11:44

Цитата:

Сообщение от dmitry111 (Сообщение 206770)
То есть получается мы обходим функцию f() и выполняем g()?

Зачем придумывать какие-то новые слова? :D
Там делается то, что я написал выше.
1. переменной присвойвается некое значение, которое возвращает функция f()... Только значением является так же функция...
2. Потом эта функция вызывается...

Цитата:

Сообщение от dmitry111 (Сообщение 206770)
function f() {
  return function g() {
    alert("sdf");
  };
}
var g = f();
g();


Тут происходит только вызов вложенной функции? Так?

что есть для тебя "вложеная функция"?
Для меня тут есть функция, которая возвращает результат в виде другой функции и не более того... :)


Часовой пояс GMT +3, время: 13:55.