初面网初面网

动态执行JS代码

四种办法:

  • eval, 同步执行, 就近原则
  • setTimeout, 异步执行
  • 创建script标签, 同步执行
  • new Function, 同步执行

演示——eval

// eval
const a = 1;

const exect = () => {
  const a = 100;
  const str = 'console.log("a",a)'
  eval(str);
}

exect()

eval里的变量会就近获取值

演示——setTimeout

const a = 1;
const exect = () => {
  const a = 100;
  const str = 'console.log("a",a)'
  setTimeout(str,0)

  // a 1
}
exect()

演示——创建script标签

const a = 1;
const exect = () => {
  const a = 100;
  const str = 'console.log("a",a)'
  
  const dynamicScript = document.createElement('script');
  dynamicScript.innerHTML = str;
  document.body.appendChild(dynamicScript)

  // a 1
}
exect()

演示——new Function

const a = 1;
const exect = () => {
  const a = 100;
  const str = 'console.log("a",a)'
  
  const newFunc = new Function(str)
  newFunc()
  
  // a 1
}
exect()

更新于 2025/2/26