域外调用
现在有一个如下结构的功能:
[javascript]
function outter(){
var a = 1;
var r = inner();
println(r);
function inner(){
return eval('a + 1');
}
}
在 inner 中,使用 eval 求解表达式,因为 inner 函数是嵌套在 outter 中的,它也就可以访问到 a 变量,eval('a + 1') 得到 2,结果理想。
考虑到 inner 需要复用,或者其它什么原因,需要隔离出去。
[javascript]
function inner(){
return eval('a + 1');
}
function outter(){
var a = 1;
var r = inner();
println(r);
}
此时运行程序,会得到 a 没有定义的错误。inner 中的 eval 表达式时找不到 a 的定义了, inner 和 outter 的 scope 完全隔离了。
怎么才能绕开障碍,让 inner 访问到 a 呢?
这里我设计了一个办法:
[javascript]
function inner(evaler){
return evaler('a + 1');
}
function outter(){
var a = 1;
var r = inner(evalIt);
println(r);
function evalIt(s){
return eval(s);
}
}
如果传递全局的window.eval 那是不行的,变量也不行,函数才有闭包特性,变量没有闭包特性。
如果在 outter 中多次用到 inner,可以将它提为全局变量,免得每次都填参数。
如果有多个 outter 要用到 inner,还是老老实实用传参数的方法吧。
最好的解决方案是能把函数的scope转借给其它函数,这得调整语言设计了。
补充:web前端 , JavaScript ,