Function构造函数

  使用Function构造函数, 也能够创建函数, 和使用关键字function定义函数有几点区别:

  使用function关键字这样定义函数:

var f = function(x,y) {return x+y};

  使用Function构造函数定义函数要这样写:

var f = new Function("x", "y", "return x+y");

  使用new Function构造函数创建函数有3个注意点:

  1:在JS运行的时候可以动态创建Function;

  JQ作者写的模板引擎就是通过new Function形式创建出来的:http://ejohn.org/blog/javascript-micro-templating/

// Simple JavaScript Templating
// John Resig - http://ejohn.org/ - MIT Licensed
(function(){
  var cache = {};

  this.tmpl = function tmpl(str, data){
    // Figure out if we‘re getting a template, or if we need to
    // load the template - and be sure to cache the result.
    var fn = !/\W/.test(str) ?
      cache[str] = cache[str] ||
        tmpl(document.getElementById(str).innerHTML) :

      // Generate a reusable function that will serve as a template
      // generator (and which will be cached).
      new Function("obj",
        "var p=[],print=function(){p.push.apply(p,arguments);};" +

        // Introduce the data as local variables using with(){}
        "with(obj){p.push(‘" +

        // Convert the template into pure JavaScript
        str
          .replace(/[\r\t\n]/g, " ")
          .split("<%").join("\t")
          .replace(/((^|%>)[^\t]*)‘/g, "$1\r")
          .replace(/\t=(.*?)%>/g, "‘,$1,‘")
          .split("\t").join("‘);")
          .split("%>").join("p.push(‘")
          .split("\r").join("\\‘")
      + "‘);}return p.join(‘‘);");

    // Provide some basic currying to the user
    return data ? fn( data ) : fn;
  };
})();

  2:Function()构造函数创建的函数的执行效率比较低;

        var a = new Date();
        var x = a.getTime();
        for(var i=0;i<100000;i++){
            function EE(){   //使用function语句定义的空函数

            }
        }
        var b = new Date();
        var y = b.getTime();
        alert(y-x);    //62,不同环境和浏览器会存在差异
        // 测试Function构造函数定义的空函数执行效率
        var a = new Date();
        var x = a.getTime();
        for(var i=0;i<100000;i++){
            new Function();  //使用Function构造函数定义的空函数
        }
        var b = new Date();
        var y = b.getTime();
        alert(y-x);    //2390

  3:Function()构造函数创建的函数执行作用域是全局的;

        var fn = new Function("x", "return x*x+y");
        var y = 3;
        alert(fn(3));
        (function(){
            var y = 2;
            alert(fn(3));
        }());

作者: NONO
出处:http://www.cnblogs.com/diligenceday/

QQ:287101329

微信:18101055830

时间: 2024-10-23 23:29:12

Function构造函数的相关文章

JS特殊函数(Function()构造函数、函数直接量)区别介绍

函数定义 函数是由这样的方式进行声明的:关键字 function.函数名.一组参数,以及置于括号中的待执行代码. 函数的构造语法有这三种: 1.function functionName(arg0, arg1, ... argN) { statements }//function语句 2.var function_name = new Function(arg1, arg2, ..., argN, function_body);//Function()构造函数 3.var func = func

使用 function 构造函数创建组件和使用 class 关键字创建组件

使用 function 构造函数创建组件: 如果想要把组件放到页面中,可以把构造函数的名称,当作 组件的名称,以 HTML标签形式引入页面中, 因为在React中,构造函数就是一个最基本的组件. 注意: 组件的首字母必须是大写 因为React在解析所有的标签的时候,是以标签的首字母来区分的,如果标签的首字母是小写,那么就按照 普通的 HTML 标签来解析,如果首字母是大写,则按照组件的形式去解析渲染. 格式: 创建: function Hello(props) { // 在组件中,如果想要使用外

关于function构造函数特别注意的

function在javascript中是对象,所以function持有构造函数例子:var a = new Function("x","y","return x+y"); 但是使用Function构造的时候特别需要注意几点:1. 允许动态创建函数,能够在js运行的时候构建2. 在循环中动态创建会影响效率3. Function所创建的函数并不是使用词法作用域,而是总会在顶层函数执行(简单就是在全局作用域编译使用)

原生js的Function,Array,Object构造函数的prototype原型方法扩展

在js中,Function构造函数的实例化对象为Function,Array,Object构造函数. <script> Function.prototype.addMethod = function (name,fn) { this.prototype[name]=fn; } Array.addMethod('test',function(){ console.log('Array method add'); }); Object.addMethod('test',function(){ co

Function javascript

通常而言,一个函数是一个子程序,他们可以被外部代码调用(亦或被滴管函数在内部调用).和程序一样,函数是由一系列声明(被称为函数体function body)组合而成.值可以传递给函数,并且函数可以返回一个值. 在javascript中,函数是一个对象,因为她可以拥有属性和方法,就像对象一样.将函数和对象区分的是函数可以被调用,他们是函数对象(Function objects). 描述 js中的所有函数都是函数对象Function object 函数和程序不一样,函数总是返回一个值,但是程序不一定

JavaScript Function 函数深入总结

整理了JavaScript中函数Function的各种,感觉函数就是一大对象啊,各种知识点都能牵扯进来,不单单是 Function 这个本身原生的引用类型的各种用法,还包含执行环境,作用域,闭包,上下文,私有变量等知识点的深入理解. 函数中的return return 语句可以不带有任何返回值,在这种情况下( return; 或函数中不含 return 语句时),函数在停止执行后将返回 undefiend 值.这种用法一般在需要提前停止函数执行而又不需要返回值的情况下. return false

JavaScript中Function和Object的关系

今天,QQ技术讨论群里面有一个人在聊天,说今天面试,面试官问他的第一个问题他就懵逼了,说是Function和Object的关系,或者说他们有什么区别.当时我微微一笑,心想这么简单的问题你都解释不清楚,那你竟然还有信心去面试.可是,当我试图组织语言来嘲讽他几句时,发现我也组织不清楚.痛定思痛,一步一步来屡一下他们之间的关系. 首先,Function是一个构造函数,那它一定就有它对应的原型对象Function.prototype,我们使用控制台打印可以得出Function.prototype=fun

关于new Function使用

一直对Function()一知半解,今日就Function()的使用做一下总结 一.函数实际是功能完整的对象,用Fucntion()直接创建函数. 语法规则:    var 函数名 = new Function( arg1, arg2, arg3, ..., argN, body );    解释:    Function 构造函数所有的参数都是字符串类型的,body是生成函数的函数体. 实例:求多个参数的和 var fnSum = new Function( 'var total = 0,ar

9.Function类型

Function类型 学习要点:1.函数的声明方式2.作为值的函数3.函数的内部属性4.函数属性和方法 在ECMAScript中,Function(函数)类型实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数时对象,因此函数名实际上也是一个指向函数对象的指针. 一.函数的声明方式 1.普通的函数声明function box(num1 , num2){ return num1 + num2;}; 2. 使用变量初始化函数var box = fun