前端那点东西 关于Function的构造函数

140 阅读1分钟

基础用法     

  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构造器被调用生成的上下文的作用域。