深入了解JavaScript之函数的定义

对于函数,大家都很熟悉。也是js里最有意思的一个部分,闭包,继承,匿名函数,没有重载,没有块级作用域。

Function类型的实例

每个函数都是Function类型的实例,所以,函数都是对象。而函数名则是一个指向对象的指针。并不像基本类型的值那样与函数绑定。

function add(num1,num2){
	return num1+num2;
}
console.log(add(1,2));   //3

var add2=add;
console.log(add2(1,2));  //3

add=null;
console.log(add2(1,2));  //3

函数的定义

定义函数通常有下面2种方法:函数声明和函数定义表达式。

函数声明:

function add(num1,num2){
	return num1+num2;
}
函数定义表达式:要注意在定义函数的结尾有一个分号;

var add=function(num1,num2){
	return num1+num2;
};
其实还有一种使用Function构造函数,但是不推荐,因为会至少解析两次代码,国语影响性能,可读性也没有前两种强。

var add=new Function("num1","num2","return num1+num2");

其实函数声明和函数表达式室友一点点区别的,那就是函数声明形式定义的函数,存在声明提升。

用第一种方法定义的函数,解析器会率先读取函数声明,并使其在执行代码之前就能用;第二种方法定义的函数,就必须等到解析器执行到他的代码行,才能被解释执行。

/*函数声明*/
alert(add(1,2));    //会正常的弹出3
function add(num1,num2){
	return num1+num2;
}
/*函数定义表达式*/
alert(add(1,2));    //报错
var add=function(num1,num2){
	return num1+num2;
}

这听起来和变量的提升挺像的,但是没什么关系,变量的声明提升,是因为js没有块级作用域,取而代之的是函数作用域,所以变量就在整个函数体里都是有定义的。
而函数的声明提升则是因为,用第二种,也就是函数定义表达式定义的 函数是在一个初始化的语句中,没执行到函数所在的语句之前,add并没有保存对函数的引用。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值