函数声明和函数表达式

如何区分函数声明和函数表达式

区分函数声明和函数表达式最简单的方式是看function关键在出现在声明中的位置。

  • 如果 function是声明中的第一个词,那么就是一个函数声明。
  • 否则就是一个函数表达式。

考虑以下代码:

//我是函数声明
function foo(){
	console.log("1");
}
//我是函数表达式
var foo = function bar(){
	console.log("1");
}

区别

  • 在函数声明中,函数名是必须的;而在函数表达式中,函数名是可以省略的(匿名函数)
  • 在提升过程中,函数声明会被整体提升到当前作用域的顶部;而函数表达式只有变量标识符被提升到了作用域顶端。

接下来我们来详细看一下

具名函数和匿名函数

对于匿名函数,大多数人比较熟悉的场景就是回调参数,举个栗子:

setTimeout(function(){
	console.log("I waited 1 second!");
},1000 );

这就是匿名函数表达式,因为function()...没有名称标识符。

具名函数就是比较常见的形式:

var foo = function bar(){
	console.log("1");
}

对比一下,虽然匿名函数看起来更为简洁,但是它也有几个缺点需要考虑:

  • 匿名函数在栈追踪的时候不会显示出有意义的函数名,使得调试很困难。
  • 匿名函数省略了函数名(这对代码的可读性十分重要),一个描述性的名称会让代码的功能不言而喻。

小建议:给函数表达式命名会让你的代码有更高的可读性和可理解性,所以尽可能做到始终给函数命名。

函数提升

关于函数提升的相关知识可以移步JavaScript----提升中的关于函数提升的叙述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值