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

评论区
评论区空空如也
发送评论
名字
0 / 20
邮箱
0 / 100
评论内容
0 / 140
由于是非实名评论,所以不提供删除功能。如果你需要删除你发送的评论,或者是其他人的评论对你造成了困扰,请 发邮件给我 。同时评论区会使用 AI + 人工的方式进行审核,以达到合规要求。

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