我需要在某处声明变量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
答案 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
你也可以考虑函数重载。