Serenader

Learning by sharing

使用new Function创建函数

Syntax new Function ([arg1[, arg2[, …argN]],] functionBody)
使用构造函数生成新实例的方式创建函数比起函数声明有以下几个特点:
  • 函数可动态生成
  • 函数均为匿名函数, Function.name 均为 anonymous
  • 函数内部无法引用局部变量,只能引用全局变量
var x = 10;
function createFunction1() {
	var x = 20;
	return new Function("return x;"); // this |x| refers global |x|
}
function createFunction2() {
	var x = 20;
	function f() {
		return x; // this |x| refers local |x| above
	}
	return f;
}
var f1 = createFunction1();
console.log(f1()); // 10
var f2 = createFunction2();
console.log(f2()); // 20