方式一
eval函数:接收一个参数s,如果s不是字符串,则直接返回s,否则执行s语句。如果s语句执行结果是一个值,则返回此值
eval("console.log(3);"); // 输出3 返回undefined
eval("1+3"); // 返回4
注意:eval函数的作用域问题与安全问题
作用域问题:直接调用时,在局部环境执行,间接调用时,默认在全局环境执行
var a = 5, b = 6;
function test() {
var a = 3, b = 4;
//直接调用,局部作用域
console.log(eval('a + b')); // 输出7
//间接调用,全局作用域
var temp = eval;
console.log(temp('a + b')); // 输出11
}
test();
安全问题:eval函数会执行任意传递的字符串,当字符串参数未知或者是来自一个不信任的源时,避免使用
方式二
(new Function("return 1+1"))(); // 返回2
注意:传参的处理方式
var obj = { name: "张三" }, key = "name", value = "李四";
console.log(obj); // {name:"张三"}
new Function('obj','key','value',`obj.${key}=value`(obj,key,value);
console.log(obj); // {name:"李四"}
使用模板字符串时,key需要加${},obj和value当作普通值处理
方式三
setTimeout函数:用来指定某个函数或某段代码,在多少毫秒之后执行
setTimeout("console.log(6);",500); // 输出6 返回定时器ID