函数表达式---递归

来源:互联网 发布:苹果手机网络加速软件 编辑:程序博客网 时间:2024/05/22 02:07

一.定义函数的方式:

1.函数声明

    function add(){        return "o";    }    特性:函数声明提升        o();//"ppp"        function o(){            alert("ppp");        }    在执行时会先读取函数声明。

2.函数表达式

    var add = function(){        return "o";    }    这其实是匿名函数,因为function后面是没有函数的名字的,只是将函数赋值给变量add。    特性:先定义后调用        o();//错误:函数不存在        var add = function(){        return "o";        }
注意:不要这样做:        if(a){            function add(){                return "o";            }        }else{            function add(){                return "wpoasd";            }        }
    表面上看是a==true时调用第一个add,否则调用第二个add。    其实是无效的,函数声明式的会函数声明提前,造成错误,js引擎会试图修复,但是不同的浏览器修复的结果不同。    可以这样做:
        var add;        if(a){            add = function(){                return "o";            }        }else{            add = function(){                return "wpoasd";            }        }

二.递归:

是函数自身的情况下造成的
    function a(num){        if(nem<=1){            return 1;        }else{            return num*a(num-1);         }    }
看起来没有啥问题,但是函数和a函数有着极强的耦合度
    如:    var b = a;    a = null;    alert(b(4))//出错
可以用arguments.callee,它指向当前运行的函数
    function a(num){        if(nem<=1){            return 1;        }else{            return num*arguments.callee(num-1);         }    }    var b = a;    a = null;    alert(b(4))//24
原创粉丝点击