动态执行js(把字符串当代码运行)

75 阅读1分钟

eval: 同步,当前作用域

var a=1;
function exec(code){
eval(code)
}
exec('console.log("a", a)')
console.log('sync');

setTimeout(第一个参数能编译字符串):异步,全局作用域

var a=1;
function exec(code){
var a= 2;
setTimeout(code)
}
exec('console.log("a", a)')
console.log('sync');

script: 同步,全局作用域 缺点:会产生一个标签

var a=1;
function exec(code){
var a= 2;
const script =document.createElement('script');
script.innerHTML= code;
document.head.appendChild(script);
}
exec('console.log("a", a)')
console.log('sync');

Function: 同步,全局作用域

var a=1;
function exec(code){
var a= 2;
new Function(code)();
}
exec('console.log("a", a)')
console.log('sync');