• JavaScript函数构造器


    函数构造器(Function constructor

    函数构造器用于创建一个函数对象,在JavaScript中实际上每一个函数都是一个函数对象。

    函数构造器的语法:

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

    arg1, arg2, ... argN  被用于作为函数正常参数名的变量名字,这些变量名必须是符合JavaScript变量标识规范的表示单个变量的字符串或者以逗号分隔的表示多个变量的字符串,比如"x", "theValue", or "a,b"。

    functionBody   包含函数定义的JavaScript语句的字符串。

    描述

    1.函数对象在函数构造器被解析成为函数的时候被创建。但是这样会比以函数声明、函数表达式等方式低效,因为这些函数时通过代码直接解析的。

    2.传递给函数构造器的字符串参数都会被当作函数构造器生成函数的变量参数名字,以他们出现的顺序作为生成的函数的参数的顺序。

    3.以函数的方式调用函数构造器(不管用不用new关键词修饰)效果一样。

    例子

    // Example can be run directly in your JavaScript console
    
    // Create a function that takes two arguments and returns the sum of those arguments
    var adder = new Function('a', 'b', 'return a + b');
    
    // Call the function
    adder(2, 6);
    // > 8

     参数a和b是可以在函数体内使用的正常的参数名字。

    生成的函数为:function (a,b){

      return a+b;

    }

    关于json解析的一种方式:var json = (new Function("return " + str))();

    原理一样,

    生成的函数为:

    function toJson(str){

       return str;

    }

    var str="{'a':1,'b':'abc'}";

    toJson(str);

    即:function(){return {'a':1,'b':'abc'}}

    函数构造器和函数声明的区别:

    用函数构造器创建的函数不会在上下文中创建闭包,它们总是被创建在全局作用域中,当执行被创建的函数时,它们只能使用自己的局部变量或者全局变量,这和eval是不同的。

    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

     参考文献:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function

  • 相关阅读:
    数据(或分布)的对称、偏倚
    【python】 与日志logging相关文章推荐
    实体类和json串的转换
    欧几里德算法----最大公约数算法
    java IdentityHashMap 与HashMap
    android gradle依赖:implementation 和compile的区别
    jmeter进行文件下载的性能测试
    Asp.Net Core MVC 框架 实现钉钉扫码登入
    前端静态资源库
    28个漂亮的React.js后台管理模板
  • 原文地址:https://www.cnblogs.com/Saints/p/5989037.html
Copyright © 2020-2023  润新知