浅析JS定义函数的几种形式

函数声明:

var function obj() {
	console.log('我是函数声明')
};

函数表达式:

函数表达式分为两种:1、命名函数表达式;2、匿名函数(函数表达式)

命名函数表达式:

命名函数表达式属于函数表达式的一种特殊形式

var obj_has_name = function obj_has_name () {
	console.log('我是函数表达式的一种特殊形式')
}

匿名函数(函数表达式):

我们常说的函数表达式就是指匿名函数

var obj_no_name = function() {
	console.log('我是一般形式的函数表达式')
}

函数的name属性:

命名函数表达式与函数声明的name属性就是函数名字,匿名函数没有name属性或为空(不同浏览器解释不同)

/*上述例子*/
obj.name == obj
obj_has_name.name == obj_has_name
obj_no_name.name == " "/undefined

函数声明与函数表达式区别:

函数提升方面:

1、函数表达式仅提升函数声明;
2、函数声明同时提升函数声明和函数定义。

function father() {
	console.log(son1);//son1是函数表达式只提升函数声明,所以输出'undefined'
	console.log(son2);//son2是函数声明提升函数声明与函数定义,所以输出'function son2(){....}'
	var son1 = function() {
		console.log('我是函数表达式')
	}
	function son2() {
		console.log('我是函数声明')
	}
}
father()
Created with Raphaël 2.2.0 函数声明:son1定义 son2的函数定义提升到father顶部 操作son1函数
Created with Raphaël 2.2.0 函数声明:son2定义 son2的函数定义+声明提升到father顶部 操作son2函数

Note:

还有一个式关于函数的术语常听到的——函数字面量,函数字面量常用来表示函数表达式(匿名函数)或者命名函数表达式,由于概念模糊不建议使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值