2015-09-29 5 views
3

Мне нужно объявить переменную a где-нибудь, а с помощью техники javascript сделать ее видимой для функции f2, вызываемой внутри функции f1. Но при вызове непосредственно (вне функции f1) функция f2 не должна печатать. Я не могу использовать eval. Я не могу изменить функцию f2. Я могу изменить функцию f1, но я хочу. Возможно ли это вообще?сделать переменную javascript видимой в разных функциях

function f1(var_name){ 
    f2(); 
} 
function f2(){ 
    console.log(a); 
} 
f1(); // must log value of the a 
f2(); // must not be able to log a 
+0

Почему бы просто не объявить его глобально? – Manu

+0

@Manu, тогда последняя строка, в которой говорится, что она не может записывать 'a', не будет функционировать, как указано OP. – 1252748

+0

Почему бы не использовать геттер и сеттеры? – jycr753

ответ

5

Маленькая работа вокруг. Объявить глобально и установить значение undefined. Задайте значение a перед вызовом функции f2 внутри f1. Установить a не определено после звонка f2

var a = undefined; 
function f1(var_name){ 
    a = 'this is a '; 
    f2(); 
    a = undefined; 
} 
function f2(){ 
    console.log(a); 
} 
1

Почему бы не использовать другую глобальную переменную? Вы определяете глобальную переменную a, а в функции f1 вы объявляете новую глобальную переменную b = a, вызываете функцию f2, которая будет печатать глобальную переменную b, снова установите глобальную переменную b в NULL.

С этим b будет определен только во время функции f1 и будет иметь значение глобальной переменной a.

1

Этот способ будет работать только в том случае, если f2() уже использует «это»: (в этом случае для добавления «этой» поддержки не будет изменений).

function f1(var_name){ 
    var scope = {a: var_name}; 
    f2.call(scope); 
} 
function f2(){ 
    console.log(this.a); 
} 

f1(123); // must log value of the a 
f2(); // must not be able to log a 

Также вы можете подумать о перегрузке функций.

+0

С вопросом: * Я не могу изменить функцию f2 *. Для этого требуется изменить значение 'f2()'. – Phylogenesis

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