<script>
function foo1(str){
  var yx02 = new Function("return " + str )();
  //alert(yx02);
 }
 
 function foo2(str){
  var yx02 = return str;
  //alert(yx02);
 }
</script>foo1和foo2有什么区别;难道不一样吗?
如果不一样,foo1有什么好处?什么时候会用到foo1?

解决方案 »

  1.   

    function foo2(str){ 
    var yx02 = return str; //what's this???
    }
      

  2.   

    那样也能执行?
    是这样吧?
    var yx02 = new Function("return '" + str + "'")(); 
    var yx02 = function(){return str}();
    两个没什么区别,只是foo1可以动态改变function中的内容
      

  3.   

    呵呵,被郁闷到了
    return 语句是不可以被赋值的
    function abc(){}和abc=new Function();
    都是定义了一个函数,后者显式定义了一个函数对象
    在使用上面没多大区别
    new Function("return " + str )();
    new Function("return " + str )定义一个函数,后面的括号执行该函数,相当于return str;不过是新创建出来的函数的return,这点要搞清;这里可以赋值给对象
    如:
    function foo1(str){ 
    var yx02 = new Function("return '" + str + "';")(); 
    alert(yx02); 
    return yx02;

      

  4.   

    <script>
    function foo1(str){
    var yx02 = new Function("return " + str )();
    //alert(yx02);
    }function foo2(str){
    var yx02 = str;//这里是这样,我刚才写错了,另外str是吧变量,类型不知道,不一定是string类型的
    //alert(yx02);
    }
    </script> 
      

  5.   

    LZ写的两种都有错误
    new Function("return " + str) //将字符串写入了函数体
    function(){return str;} //包闭
      

  6.   

    看下面的例子就明白了
    <script>
    var a = "初始值";
    var b = "初始值";
    var c = "初始值";
    function foo1(str){ 
    var yyy1 = new Function("return '" + str + a +"';");
    a = "已变化";
    return yyy1();
    }
    function foo2(str){ 
    b = "已变化";
    return yyy2(str);
    }
    function foo3(str){ 
    var yyy3 = function(str){return str+a;};
    c = "已变化";
    return yyy3(str);
    }function yyy2(str){
        return str + b;
    }alert(foo1("111"));//111初始值
    alert(foo2("111"));//111已变化
    alert(foo3("111"));//111已变化
    </script>
      

  7.   

    alert(foo1("111"));//111初始值
    ls,为什么会没有变化啊?
      

  8.   

    分析一下:
    function foo1(str){ 
        var yyy1 = new Function("return '" + str + a +"';");//先执行它结果为var yyy1 = new Function("return '111初始值';");//已经成字符串'111初始值',与 str或a的变化已经没 关系了
        a = "已变化";//不会改变上行的初始值
        return yyy1();//调用var yyy1 = new Function("return '111初始值';");
    }
    程序是一行行执行的,请记住!
      

  9.   

    两个没什么区别,只是foo1可以动态改变function中的内容
      

  10.   


    var yx02 = new Function("return " + str);//动态,可以在运行时动态构造函数
    var yx02 = function() {return str;} //静态,只能在编译解析期构造函数建议你看看javascript权威指南,核心javascript的function章节
      

  11.   

    http://hi.baidu.com/柴兴博/
    欢迎你的浏览
      

  12.   

    有不同的
    var f=function(){alert(1)}var yx01 = new Function("return " + f)(); 
    var yx02 = function(){return f}();yx01()
    alert(yx01==f)yx02()
    alert(yx02==f)
      

  13.   

    function foo1(str){ 
        //str:111;a:初始值
        //该句等同于var yyy1 = new Function("return '111初始值';");
        //等同于var yyy1 = function(){return '111初始值';}
        //在这句后,a变量的变化已经跟它没关系了
        //而foo2、foo3中的a引用的全局变量a,所以会受a变量的影响
        var yyy1 = new Function("return '" + str + a +"';");
        a = "已变化";
        return yyy1();
    }