Skip to content

动态执行 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 标签相比,可以不用创建标签

© thebestxt.cc
辽ICP备16009524号-8
本站所有文章版权所有,转载请注明出处