当前位置:编程学习 > JAVA >>

域外调用

现在有一个如下结构的功能:
 
[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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,