使javascript变量在不同的函数中可见

时间:2015-09-29 15:47:43

标签: javascript variables scope visibility

我需要在某处声明变量a,并且使用javascript技术使f2函数内的f1函数可见。但直接调用(f1函数之外)f2函数必须无法打印。 我不能使用eval。 我无法改变f2功能。 我可以随意改变f1功能。 这有可能吗?

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

3 个答案:

答案 0 :(得分:5)

小工作。 声明全局并设置为undefined。 在f1中调用f2函数之前设置a的值。在f2调用后将a设置为未定义

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

答案 1 :(得分:1)

为什么不使用另一个全局变量? 你定义了一个全局变量a,并在函数f1中声明了一个新的全局变量b = a,调用将打印b全局变量的f2函数,设置gobal变量{{1再次为NULL。

这样,b将仅在f1函数期间定义,并具有全局b变量的值。

答案 2 :(得分: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

你也可以考虑函数重载。