日期:2014-05-16 浏览次数:20726 次
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)