动态执行 JS
eval
特点:同步,当前作用域
var a = 1
function exec(code) {var a = 2eval(code)
}
exec('console.log("a",a)')
console.log('sync')
setTimeout
特点:异步,全局作用域
var a = 1
function exec(code) {var a = 2setTimeout(code, 0)
}exec('console.log("a",a)')
console.log('sync')
创建 script 元素
特点:同步,全局作用域
var a = 1
function exec(code) {var a = 2const script = document.createElement('script')script.innerHTML = codedocument.body.appendChild(script)
}exec('console.log("a",a)')
console.log('sync')
Function
特点:同步,全局作用域
var a = 1
function exec(code) {var a = 2const fn = new Function(code)fn()
}exec('console.log("a",a)')
console.log('sync')