基础用法
Function是一个构造函数,其中所有的参数都是以字符串的格式传入,最后一个参数是一个可执行js语句的字符串,相当于要执行的语句,位于该字符串前面的参数(可以省略,即不传参)都为该执行语句的参数。
new Function ([arg1[, arg2[, ...argN]],] functionBody)var m = "我是m";let result = new Function("a","b","console.log(a,b,m)") //最后一个执行语句会接受到前面传入的参数和外部传入的参数console.log(result(2,5)) // 2,5,"我是m"坑
需要注意的是Function构造出的对象比直接声明函数更低效并且要格外注意下面这种情况
var n = 1;
function f(){
var n = 2;
var e = new Function("return n;");
return e;
}
console.log (f()()); // 1或许你会把他解释成下面这样,但其实是不正确的
var n = 1;
function f(){
var n = 2;
function e(){
return n;
}
return e;
}
console.log (f()()); // 2 打印后可以发现,第一段代码输出的是1,而第二段代码输出的是2
这是因为使用Function构造器生成的函数,一般是在全局创建函数,不会产生闭包。当运行这些函数的时候,只能访问自己的本地变量和全局变量,不能访问Function构造器被调用生成的上下文的作用域。