Fork me on GitHub

JavaScript的函数

  • Function
        函数实际上就是对象,每一个函数都是Function类型的实例;函数的定义方式有很多种不一一列举了。

其中有一种特殊的定义方式:

var fnSum = new Function("num1","num2","return num1+num2"); //不推荐

 

一般情况下不推荐使用这种方式。因为这种语法会导致解析两次代码(第一次是解析常规ECMAScript代码,第二次解析传入构造函数中的字符串)。
但是这种语法却可以很清晰的理解“函数是对象,函数名是指针”。 

 

  • 函数声明与函数表达式
函数声明与函数表达式是有区别的。具体有什么区别呢?

解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码之前可以访问;至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。查看下面2个例子:

 

    1. 错误的  
      alert(sum(10,10));
      var sum = function(num1,num2){
          return num1 + num2;
      }
    2. 正确的   
      alert(sum(10,10));
      function sum (num1,num2){
          return num1 + num2;
      }
  • 函数内部属性

 其余的我就不一一列举。主要说明以下2个属性:

 

  1. callee
    返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文
    以下函数返回阶乘

    function factorial(num) {
        if (num <= 1) {
            return 1;
        }else {
             return num * arguments.callee(num-1);
        }
    }
      

  2. caller  
    返回一个对函数的引用,该函数调用了当前函数。
    function outer() {
        inner();
    }

    function inner() {
        alert(inner.caller);
    }

    outer();

 

posted @ 2012-09-27 11:28  veSky  Views(194)  Comments(0Edit  收藏  举报