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