var foo = "function (){ alert('meee'); }";
foo();
我已经尝试了上面的方法,但它不起作用有没有其他方法可以在不使用 eval 的情况下执行该函数?
谢谢
最佳答案
您想使用 Function
正如安德斯所说,直接构造函数。所有参数都是字符串。最后一个参数是函数的主体,任何前导参数都是函数采用的参数的名称。
借用安德斯的例子,
var multiply = new Function("x", "y", "return x * y");
会像写作
var multiply = function (x,y) {
return x * y
}
在你的例子中,你有 "function (){ alert('meee'); }"
并且您想将其保存为 var foo
的函数.
var fn = "function (){ alert('meee'); }";
var foo = new Function("return ("+fn+")")();
foo();
// alerts "meee"
Function
之间的区别和 eval
是eval
在私有(private)范围内运行,而 Function
在全局范围内运行。
var x="haha", y="hehe";
function test () {
var x=15, y=34;
eval("alert('eval: ' + x + ', ' + y)");
new Function("alert('Func: ' + x + ', ' + y)")();
}
test();
// eval: 15, 34
// Func: haha, hehe
不要尝试在控制台中运行它,你会得到一个欺骗性的结果(控制台使用 eval
)。将其写入 <script>
标记并将其加载到浏览器中将给出真实结果。
关于javascript - 将字符串更改为 javascript 中的函数(不是 eval),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3338397/