日期:2014-05-16 浏览次数:20611 次
function foo2(str){ var yx02 = return str; //what's this??? }
------解决方案--------------------
new Function("return " + str) //将字符串写入了函数体 function(){return str;} //包闭
------解决方案--------------------
看下面的例子就明白了
<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初始值';");
}
程序是一行行执行的,请记住!
------解决方案--------------------
有不同的
var f=function(){alert(1)} var yx01 = new Function("return " + f)(); var yx02 = function(){return f}(); yx01() alert(yx01==f) yx02() alert(yx02==f)