<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?
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?
var yx02 = return str; //what's this???
}
是这样吧?
var yx02 = new Function("return '" + str + "'")();
var yx02 = function(){return str}();
两个没什么区别,只是foo1可以动态改变function中的内容
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;
}
function foo1(str){
var yx02 = new Function("return " + str )();
//alert(yx02);
}function foo2(str){
var yx02 = str;//这里是这样,我刚才写错了,另外str是吧变量,类型不知道,不一定是string类型的
//alert(yx02);
}
</script>
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>
ls,为什么会没有变化啊?
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 yx02 = new Function("return " + str);//动态,可以在运行时动态构造函数
var yx02 = function() {return str;} //静态,只能在编译解析期构造函数建议你看看javascript权威指南,核心javascript的function章节
欢迎你的浏览
var f=function(){alert(1)}var yx01 = new Function("return " + f)();
var yx02 = function(){return f}();yx01()
alert(yx01==f)yx02()
alert(yx02==f)
//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();
}