Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.09.2012, 00:39
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

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

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 и более?
Ответить с цитированием
  #2 (permalink)  
Старый 27.09.2012, 00:47
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

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

Сообщение от dmitry111 Посмотреть сообщение
А если бы их было 2, 3 и более?
Хоть миллион.
function Rec(){
    return Rec
}
Rec.toString = function(){return '[function Rec]'}

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

=)
__________________
29375, 35

Последний раз редактировалось Aetae, 27.09.2012 в 00:52.
Ответить с цитированием
  #3 (permalink)  
Старый 27.09.2012, 08:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

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

превращает g в функцию. Далее идет ее вызов...
g()
Ответить с цитированием
  #4 (permalink)  
Старый 27.09.2012, 08:48
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

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

function f() {
  return function () {
    alert("sdf");
  };
}
var g = f();
g();
Ответить с цитированием
  #5 (permalink)  
Старый 27.09.2012, 08:51
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

dmitry111, что есть для тебя вообще "вложеная функция"?
Ответить с цитированием
  #6 (permalink)  
Старый 27.09.2012, 10:57
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

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:02.
Ответить с цитированием
  #7 (permalink)  
Старый 27.09.2012, 11:06
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

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

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


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


Тут происходит только вызов вложенной функции? Так?
Ответить с цитированием
  #8 (permalink)  
Старый 27.09.2012, 11:13
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Сообщение от ksa
dmitry111, что есть для тебя вообще "вложеная функция"?
function f() {
  return function g() {
    alert("sdf");
  };
}
var g = f();
g();


в данном примере возвращаемый объект? Нет?
Ответить с цитированием
  #9 (permalink)  
Старый 27.09.2012, 11:39
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Сообщение от dmitry111 Посмотреть сообщение
Имел в виду это:
function getFunc() {
  var func = function() { alert("1"); }; 
    var func2 = function() { alert("2"); };
    var func3 = function() { alert("3"); };
}
В этом примере внутри функции getFunc просто определяются 3 переменные func, func2 и func3... И ничего более.
Ответить с цитированием
  #10 (permalink)  
Старый 27.09.2012, 11:44
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

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

Сообщение от dmitry111 Посмотреть сообщение
function f() {
  return function g() {
    alert("sdf");
  };
}
var g = f();
g();


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

Последний раз редактировалось ksa, 27.09.2012 в 11:46.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции дочернего окна mgluhov Events/DOM/Window 18 16.07.2012 23:05
Почему происходит проверка до вызова самой функции? wwwboy Общие вопросы Javascript 5 09.12.2011 03:37
Двойной вызов функции Tmin10 jQuery 8 08.12.2011 15:19
Почему так происходит. demoniqus Общие вопросы Javascript 1 27.03.2011 16:28
Вызов функции (Sandr) AJAX и COMET 12 16.03.2011 10:43