日期:2014-05-16  浏览次数:20587 次

foo1和foo2有什么区别;难道不一样吗?
<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?

------解决方案--------------------
JScript code
function foo2(str){ 
var yx02 = return str; //what's this???
}

------解决方案--------------------
探讨
JScript codefunction foo2(str){var yx02=return str;//what's this???}

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

------解决方案--------------------
看下面的例子就明白了
JScript code
<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>

------解决方案--------------------
分析一下:
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初始值';");
}
程序是一行行执行的,请记住!

------解决方案--------------------
有不同的
JScript code
var f=function(){alert(1)}

var yx01 = new Function("return " + f)(); 
var yx02 = function(){return f}();

yx01()
alert(yx01==f)

yx02()
alert(yx02==f)