如何把一个字符串,当成一个 JS 代码来执行?
eval
1 2 3 4 5 6 7 8 9 10 11
| var a = 1;
function exec(code) { var a = 2; eval(code); } exec("console.log("a", a)"); console.log("sync");
|
eval()
函数会将传入的字符串当做 JavaScript 代码进行执行,它会返回字符串中代码的返回值。如果返回值为空,则返回 undefined。
setTimeout
1 2 3 4 5 6 7 8 9 10
| var a = 1;
function exec(code) { var a = 2; setTimeout(code, 0); } exec("console.log("a", a)");
|
setTimeout()
中的 code
参数是一个可选语法,它允许你包含在定时器到期后编译和执行的字符串而非函数。
script
1 2 3 4 5 6 7 8 9 10 11 12
| 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", a)");
|
Function
1 2 3 4 5 6 7 8 9 10 11
| var a = 1;
function exec(code) { var a = 2; var fn = new Function(code); fn(); } exec("console.log(123)");
|