2015-06-09 6 views
1

Как вызвать внутреннюю функцию извне в следующем коде?Как получить доступ к функции внутри другой функции

(function(){ 
    var funOne = { 
     funTwo : function(){ 
      var funFour = function(){ 
       console.log('inner function working'); 
      } 
     }, 
     funThree : function() { 
      console.log('working'); 
     } 
    } 
    funOne.funTwo(); // works 
    funOne.funThree(); // works again 
    funOne.funTwo.funFour(); // throwing exception 

    })(); 
+0

Вы должны дать 'funOne' другое имя - это не функция. – Bergi

ответ

2

У вас есть вопрос рамочного с funFour усугубляется, пытаясь определить funTwo выступать в качестве функции (funOne.funTwo()) и объекта (funOne.funTwo.funFour()).

Вот 2 варианта, чтобы получить доступ к funFour:

  1. Пусть funTwo сделать funFour доступным на более доступном уровне (к примеру, через funOne).
  2. Имейте funTwo возвратите funFour внутри объекта. Вам все равно нужно добавить скобки, чтобы на самом деле вызвать funTwo() в вашем выпуске.

Как изменить funTwo:

funTwo : function(){ 
     var funFour = function(){ 
      console.log('inner function working'); 
     }; 
     funOne.funFour = funFour; // Option 1 
     return { 'funFour': funFour }; // Option 2 
    }, 

Как звонить каждый вариант:

funOne.funFour(); // Option 1 
funOne.funTwo().funFour(); // Option 2 
+0

Вариант 2 работает хорошо. Однако я не смог запустить опцию 1. –

+0

Вот JSFiddle (https://jsfiddle.net/3qy07s0d/), показывающий оба варианта в полном примере. –

0

Там нет никакого способа, чтобы получить доступ к локальной переменной (Var funFour) из функции funTwo снаружи. Если вы хотите использовать funFour вне функции funTwo, вам нужно объявить funFour как Глобальная переменная.

Отредактированный код находится здесь.

(function(){ 
    var funFour; 
    var funOne = { 
     funTwo : function(){ 
      funFour = function(){ 
       console.log('inner function working'); 
      } 
     }, 
     funThree : function() { 
      console.log('working'); 
     } 
    } 
    funOne.funTwo(); // works 
    funOne.funThree(); // works again 
    funFour(); // Call function funFour here 

    })(); 
Смежные вопросы