PLDaily / blog

✨My Notes

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

new Function()及eval的使用

PLDaily opened this issue · comments

new Function()

ES6环境下

let str1 = 'console.log(`Hello ${name}!`)';
let func1 = new Function('name', str1);
func1('pcd1') // "Hello pcd1!"
//new Function('name', str1).call(null, 'pcd1');

普通环境

let str1 = 'console.log("Hello " + name)';
let func1 = new Function('name', str1);
func1('pcd1') // "Hello pcd1!"
//new Function('name', str1).call(null, 'pcd1');

eval()

ES6环境下

let str2 = '(name) => console.log(`Hello ${name}!`)';
let func2 = eval.call(null, str2);
func2('pcd2') // "Hello pcd2!"

普通环境

let str2 = 'function(name) { return console.log("Hello " + name)}';
let func2 = eval.call(null, "(" + str2 + ")");// 必须加小括号,表示强制返回运算结果
func2('pcd2') // "Hello pcd2"

以上方式均传递参数,不传递参数的方式省略

eval加小括号的原因

eval还可以将json字符串转化为对象字面量,加小括号,表示强制返回运算结果,否则大括号中的代码会被当作代码块执行