前端基础笔记

【javascript】函数表达式&递归

2017-11-20  本文已影响2人  shanruopeng

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!");
};

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

//不要这样做!
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)); //出错!
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);
    }
})
//这种方式在严格模式和非严格模式下都行得通。
好好学习
上一篇 下一篇

猜你喜欢

热点阅读