有这么个情况,看代码
<html>
<body>
<script>
var mmBase = ':(';
function readcv(){
        var mmBase = ':)';
        function read(v){
                //除了用eval能得到上级局部域的值(笑脸),还有啥方法?
                //return eval('mm'+v);
        }
        alert(read('Base'));
}
readcv();
</script>
</body>
</html>根据串找出相应局部变量的值,除了用eval,还有啥好方法没?
因为改的是别人的代码,服务器代码生成的js代码,mm开头的变量定义很多,不想也不敢把变量提到window域。

解决方案 »

  1.   

    <script>
    var mmBase = ':(';
    function readcv(){
            var mmBase = ':)';
            function read(v){
                    //除了用eval能得到上级局部域的值(笑脸),还有啥方法?
                    return {
    'mmBase':mmBase
    }['mm'+v]
            }
            alert(read('Base'));
    }
    readcv();
    </script>
      

  2.   

    既然是动态生成的~·那能用for循环吗?循环一遍就行了~·
      

  3.   

    理论上确实可以循环生成一次,无奈服务器代码层层嵌套,那个变量生成代码已经封装成个函数,里面又有不少逻辑,该生成什么变量,不该生成什么变量,都有判定。好不麻烦。
    如果这样我还是eval算了。
    不过你的思路是没错的。
      

  4.   

    先用循环把所有变量生成一个json对象。然后在return json['mm'+v];这样就行了~·
      

  5.   

    如果这样的话,我觉得你还是用eval好~·
    也能节省好多没必要的开销。
      

  6.   


    如果这样的话,我觉得你还是用eval好~·
    也能节省好多没必要的开销。
      

  7.   


    <html>
    <body>
    <script>
    var mmBase = ':(';
    function readcv(){
            var mmBase = ':)';
            function read(v){
                    //除了用eval能得到上级局部域的值(笑脸),还有啥方法?
                    return Function('return mm' + v)();
            }
            alert(read('Base'));
    }
    readcv();
    </script>
    </body>
    </html>
      

  8.   

    这个我有想过,可惜new Function读取的变量是全局域的,是个哭脸。呵呵