【javascript】函数表达式&递归

  • 定义函数的方式有两种:一是函数声明,另一种是函数表达式。

1、函数声明语法

function functionName(arg0, arg1, arg2) {
    //函数体
}
//只在Firefox、Safari、Chrome 和Opera 有效
alert(functionName.name); //"functionName"
  • 函数声明有一个重要特征是函数声明提升,在执行代码之前会先读取函数声明。
sayHi();
function sayHi(){
    alert("Hi!");
}
//这个例子不会抛出错误,因为在代码执行之前会先读取函数声明。

2、函数表达式语法形式

var functionName = function(arg0, arg1, arg2){
    //函数体
};
//函数表达式有几种不同的语法形式。这是最常见的一种形式。在使用前必须先赋值。
sayHi(); //错误:函数还不存在
var sayHi = function(){
    alert("Hi!");
};
  • 这种形式创建一个函数并将它赋值给变量functionName。这种情况下创建的函数叫做匿名函数拉姆达函数

理解函数声明和函数表达式的区别

//不要这样做!
if(condition){
    function sayHi(){
        alert("Hi!");
    }
} else {
    function sayHi(){
        alert("Yo!");
    }
}
//在js中属于无效语法,javascript引擎会尝试修正错误,但各浏览器的修正机制不一致。
  • 使用函数表达式
//可以这样做
var sayHi;
if(condition){
    sayHi = function(){
        alert("Hi!");
    };
} else {
    sayHi = function(){
        alert("Yo!");
    };
}
//不同的函数会根据condition 被赋值给sayHi。
  • 能够创建函数再赋值给变量,也就能够把函数作为其他函数的值返回.
function createComparisonFunction(propertyName) {
    return function(object1, object2){
        var value1 = object1[propertyName];
        var value2 = object2[propertyName];
        if (value1 < value2){
            return -1;
        } else if (value1 > value2){
            return 1;
        } else {
            return 0;
        }
    };
}

递归

  • 递归函数是在一个函数通过名字调用自身的情况下构成的
function factorial(num){
    if (num <= 1){
        return 1;
    } else {
        return num * factorial(num-1);
    }
}
var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)); //出错!
  • 为解决耦合问题,可以使用arguments.callee
function factorial(num){
    if (num <=1) {
        return 1;
    } else {
        return num * arguments.callee(num-1)
    }
}
//但在严格模式下,不能通过脚本访问arguments.callee,访问这个属性会导致错误。
  • 可以使用命名函数表达式来实现此递归函数
var factorial = (function(num){
    if(num<=1){
        return 1;
    }else{
        return num*(num-1);
    }
})
//这种方式在严格模式和非严格模式下都行得通。
好好学习
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 定义函数的方式有两种:函数声明和函数表达式。 函数声明的一个重要特征就是函数声明提升,意思是在执行代码前会先读取函...
    oWSQo阅读 3,923评论 0 0
  • 第 2 章:函数基础 函数式编程不是仅仅用 function 这个关键词来编程。如果真这么简单,那我这本书可以到此...
    iKcamp阅读 4,505评论 0 7
  • 时间过得真快,转眼间,你们大学毕业了,可能此刻的你在忙着拍毕业照,或者和即将分离的同学聚餐,再或许你们已经忙着开始...
    李耳的成长频道阅读 3,644评论 2 4
  • 横波 为圣为佛,成忠成孝,终归黄公! ——顾媚 离开天文台,道周回客栈看望了玉卿和孩子,然后带着两个随从再次出游。...
    咸阳古道阅读 3,251评论 2 2
  • 今日体验 断 圈子决定人生,物以类聚,人以群分。 牌友只会催你打牌 酒友只会催你干杯 而靠谱的人却会感染你如何取得...
    全息心空间阅读 1,409评论 0 0

友情链接更多精彩内容