0%
动态执行 JavaScript
将一个字符串当 JS 执行。
eval
javascript
function exec(code) {
var a = 2
eval(code)
}
exec('console.log(a)') // 2
eval
执行的代码是同步的eval
的作用域是当前作用域
setTimeout
javascript
var a = 1
function exec(code) {
var a = 2
setTimeout(code, 0)
}
exec('console.log(a)')
console.log('sync')
/**
* sync
* 1
*/
setTimeout
异步执行全局作用域
创建 script 元素
javascript
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)')
console.log('sync')
/**
* 1
* sync
*/
同步执行
全局作用域
创建 Function
javascript
var a = 1
function exec(code) {
var a = 2
const fn = new Function(code)
fn()
}
/**
* 1
* sync
*/
同步
全局作用域
和创建 script 标签相比,可以不用创建标签