js 动态执行,传入字符串,执行字符串中的代码

eval可以去除字符串中的引号,执行代码是同步的,使用的局部变量
setTimeout第一个参数可以传入字符串,会被当作代码来执行,是异步的,使用的全局变量

index.html

1
<script src="app.js"></script>

app.js

1
2
3
4
5
6
7
8
9
10
11
12
13
let a = 1;
function exec1(code) {
var a = 2;
eval(code);
}

function exec2(code) {
setTimeout(code);
}

exec1("console.log(a);");
exec2("console.log(a);");
console.log("sync");

结果

1
2 sync 1