命名函数表达式--有标识符的函数表达式

定义函数的三种方法
1.函数声明

function functionName(arg0, arg1, arg2) {
//函数体
};

函数声明最重要的一个特性是函数声明提升,即在执行代码之前会先读取函数声明,因此可以把函数声明放在调用它的语句后面。
2.函数表达式(2种),也叫函数字面量
2.1没有标识符的叫匿名函数(拉姆达函数)

var functionName = function(arg0, arg1, arg2) { 
//函数体
};

没有命名的函数表达式比较常见,比如不希望函数声明提升时,特别是在一些初始化函数时,可以考虑使用匿名函数。

2.2 有标识符的叫命名函数表达式

var functionName = function foo(arg0, arg1, arg2) {
//函数体
};

3.构造函数法

var functionName = new Function('arg0', 'arg1', 'return arg0 + arg1;');

命名函数表达式的应用
对于递归,使用arguments.callee 代替函数名,可以确保调用函数不出问题,但是在严格模式下,不能通过脚本访问 argumnts.callee,这时,可以使用命名函数表达式来达到相同的效果。

var factory = (function f(num) {
    console.log(f); //标识符 f 只在函数作用域中有效,打印标识符f num 次
    if (num <= 1) {
        return 1;
    }
    else {
        return num * f(num - 1);
    }
});
f = 0;
console.log(f); //0
factory(2);
/*
ƒ f(num) {
    console.log(f);
    if (num <= 1) {
        return 1;
    }
    else {
        return num * f(num - 1);
    }
}
ƒ f(num) {
    console.log(f);
    if (num <= 1) {
        return 1;
    }
    else {
        return num * f(num - 1);
    }
}
2
*/

有标识符的函数,调用栈会显示被调用函数的函数名,方便调试。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值