2015-03-23 4 views
0

Не могли бы все рассказать мне, как вызвать функцию внутри функции? Например:Функция вызова внутри функции

function betterExampleNeeded() { 
     var a = 1; 
     function oneMoreThanA() { 
     return a + 1; 
     } 
     return oneMoreThanA(); 
    } 

Как звонить oneMoreThanA() Заранее спасибо

+5

Просто вызовете функцию 'betterExampleNeeded' –

+1

Что случилось с тем, как вы называете' oneMoreThanA() 'в вашей выборке ? –

+0

Я пытаюсь вызвать oneMoreThanA() непосредственно в Javascript Console в Chrome. Он возвращает ошибку. Uncaught ReferenceError: oneMoreThanA не определен –

ответ

1

Вы звоните oneMoreThanA в вашем примере.

Если вы хотите, чтобы вызвать его из вне вашей betterExampleNeeded функции, то вам нужно иметь betterExampleNeeded сделать эталонную functino доступных за ее пределы, пути:

  • Возвращение его
  • Назначения его к переменному в содержащой сфере
  • Назначение его свойство объекта на аргументе, переданный в него

... или аналогичный.

Например:

function betterExampleNeeded() { 
    var a = 1; 
    function oneMoreThanA() { 
     return a + 1; 
    } 
    return oneMoreThanA;  // <=== Note! No() 
} 

var f = betterExampleNeeded(); 
console.log(f()); // 2 
console.log(f()); // 2 
console.log(f()); // 2 

Или мы могли бы даже изменить a:

function betterExampleNeeded() { 
    var a = 1; 
    function oneMoreThanA() { 
     return ++a;   // <=== Modify `a` 
    } 
    return oneMoreThanA; 
} 

var f = betterExampleNeeded(); 
console.log(f()); // 2 
console.log(f()); // 3 
console.log(f()); // 4 
+0

Спасибо за ответ. У меня возникли проблемы с пониманием javascript. Пожалуйста, поправьте меня, если я ошибаюсь. Функция - это объект, если я назначу эту функцию переменной. Например, var a = function betterExampleNeeded() { var a = 1; функция одинMoreThanA() { возвращение a + 1; } return oneMoreThanA(); } Можно ли вызвать функцию внутри с помощью a.oneMoreThanA()? Извинения за мой формат, я не знаю, как настроить здесь. –

+0

Извините, я должен был удалить «betterExampleNeeded», чтобы сделать его анонимной функцией –

+0

@XuzhengWang: Нет, потому что хотя функции являются объектами, вы не установили свойство этой функции с именем 'oneMoreThanA'. Функция 'oneMoreThanA' * inside * полностью закрыта для кода * внутри * функции, если только вы не выполните одну из перечисленных выше вещей, чтобы разоблачить ее во внешнем мире. –

Смежные вопросы