2013-03-12 3 views
1

У меня есть функция что-то вроде этого:переменная вызов внутри функции

var func1 = function() { 
     var apple; 
     //Some other code 
}; 

и я прошел функцию в качестве параметра для некоторой другой функции

control(func); 

Теперь я хочу, чтобы получить доступ к переменное яблоко в функции управления. func1.apple не работает. Кто-нибудь есть идея, как это делать?

+1

Я думаю, что вы можете сделать это только если вы добавите возвращение яблочного заявление в свой paramfunction. если это не так, как вы хотите, вы должны использовать объектный литерал как параметр, а не функцию –

ответ

2

Невозможно использовать этот синтаксис без изменения функции. func1.apple не запускается apple, и что-то вроде func1().apple уже запустили apple. Если вы просто хотите что-то вернуть, то сделать это с помощью return:

var func1 = function() { 
    var apple; 
    … 
    return apple; 
}; 

var apple = func1(); 

или вернуть объект, если у вас есть несколько значений для возврата:

var func1 = function() { 
    var apple; 
    … 
    return {apple: apple}; 
}; 

var apple = func1().apple; 

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

var func1 = function(useApple) { 
    var apple; 
    … 
    useApple(apple); 
    … 
}; 

func1(function(apple) { 
    // Do something with apple 
}); 

* Свойства отсутствуют эр путь, но они считают, как обратные вызовы и зло :)

+0

Спасибо. Это помогло. – 2013-03-12 17:21:08

0

Я думаю, что вы можете искать это шаблон конструктор

var func1 = function() { 
     this.apple = "My Apple"; 
}; 

var myFuncInstance = new func1(); 

myFuncInstance.apple; // "My Apple" 
Смежные вопросы