Function构造函数

Function 构造函数

用法

创建一个新的Function对象。 在 JavaScript 中, 每个函数实际上都是一个Function对象。

1
2
3
4
var sum = new Function('a', 'b', 'return a + b');

console.log(sum(2, 6));
// expected output: 8

语法

new Function ([arg1[, arg2[, …argN]],] functionBody)

参数

arg1, arg2, … argN

被函数使用的参数的名称必须是合法命名的。参数名称是一个有效的JavaScript标识符的字符串,或者一个用逗号分隔的有效字符串的列表;例如“×”,“theValue”,或“A,B”。

functionBody

一个含有包括函数定义的JavaScript语句的字符串

使用Function构造器生成的Function对象是在函数创建时解析的。这比你使用函数声明或者函数表达式(function)并在你的代码中调用更为低效,因为使用后者创建的函数是跟其他代码一起解析的。

所有被传递到构造函数中的参数,都将被视为将被创建的函数的参数,并且是相同的标示符名称和传递顺序

神奇的🌰:

1
2
3
4
5
6
7
8
9
function get(data, ...args) {
const res = JSON.stringify(data);
return args.map((item) => (new Function(`try {return ${res}.${item} } catch(e) {}`))());
}

const obj = { selector: { to: { toutiao: "FE Coder"} }, target: [1, 2, { name: 'byted'}]};

console.log(get(obj, 'selector.to.toutiao', 'target[0]', 'target[2].name', 'asd'));
// 输出 ["FE Coder", 1, "byted", undefined]

注意

  • Function构造器生成的函数,在全局作用域中被创建
  • 大量修改DOM元素的递归快捷方式