前言:怎么将字符串当代码执行。有 4 中方式实现 eval、setTimeout、创建 script 标签、new Function
1. eval
特点:同步执行,当前作用域
var name = "yq"; function exec(string) { var name = "yqcoder"; eval(string); } exec("console.log(name)"); console.log("end");
2. setTimeout
setTimeout 的第一个参数可以传字符串的,自动将这个字符串当作代码来运行
特点:异步执行,全局作用域
var name = "yq"; function exec(string) { var name = "yqcoder"; setTimeout(string); } exec("console.log(name)"); console.log("end");
3. 创建 script 元素
特点:同步执行,全局作用域
var name = "yq"; function exec(string) { var name = "yqcoder"; const script = document.createElement("script"); script.text = string; document.head.appendChild(script); } exec("console.log(name)"); console.log("end");
4. 使用 Function
特点:同步执行,全局作用域
var name = "yq"; function exec(string) { var name = "yqcoder"; new Function(string)(); } exec("console.log(name)"); console.log("end");