js函数表达式

 

定义函数的方式

定义函数表达式的方法有两种,一种是函数声明,另一种是函数表达式.

函数声明的方式,关于函数声明的方式,它的一个重要的特性就是函数声明提升(function declaration hoisting),意思是在执行代码之前会先读取函数声明。这就意味着可以把函数声明放在调用它的语句后面,like this

 

1             sayHi();//声明函数(function declaration hoisting)
2             function sayHi(){
3                 alert("Hi!");
4             }    

 

 函数表达式有多种表达方式,下面是最常见的一种

 

 var func = function(agr1,arg2){//创建匿名函数
      alert(arg1 + ‘  ‘ + arg2);//函数体
  }    

 

函数表达式与其他表达式一样,使用前必须赋值。比如下面的代码就会导致错误。

   var condition = true;
    //never do this!  不同的浏览器会做出不同的行为 不要这么做!
    if(condition){
        function sayHi(){
            alert("Hi!");
        }
    } else {
        function sayHi(){
            alert("Yo!");
        }
    }
    sayHi();

 

函数可以赋值给变量,自然也可以当作返回值返回。

递归

就像每一门语言一样,任何方法或者函数解决问题的思路有递归和枚举两种基本思路,但是js中的递归还是有个小陷阱的,这里需要注意。看看下面的代码吧,只是一个简单的求阶乘的函数。

        //求阶乘,看起来并没有问题
        function factorial(num) {
            if (num <= 1) {
                return 1;
            } else {
                return num * factorial(num - 1);
            }
        }
        var anotherFactorial = factorial;
        factorial = null;
        alert(anotherFactorial(4));  //error!

 

这里隐藏的问题就是,如果先用一个变量anotherFactorial指向factorial函数对象(函数对象哦),再将fatorial置空(相当于window对象的factorial属性=null),再执行anotherFactorial()时,会发现调用fatorial

时会发生错误的,原因是null不是函数。那么为了避免这样的问题我们可以这样改进这个函数,使用arguments.callee可以解决这个问题。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ss

js函数表达式,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。