函数是对象,函数名是指针

如题,函数与函数名的关系就和对象与对象指针关系是一样的,如何理解呢?

function sum(a,b){
  return a+b;
}

上述代码定义了一个名为sum的函数,其函数名sum与函数主体的关系如下:

image

和对象与对象指针的关系一样,一个函数可以有多个名字。

function sum(a,b){
  return a+b;
}
alert(sum(10,10));//20
var anotherSum = sum;
alert(anotherSum(10,10));//20

上述代码将函数指针sum赋给anotherSum(函数名不带括号时是访问函数指针,而不是调用函数)。于是sum和anotherSum都指向了函数主体:

image

现在函数就有了两个名字,如果将其中一个名字删掉(设为null,也不影响另一个名字与函数的关系):

sum = null;
alert(anotherSum(10,10));//20

image

从上图可看出,sum=null仅是断绝了sum与函数的联系,而不影响函数本身,即可正常调用anotherSum。

附加说明:有了对以上的理解,函数没有重载也便很好理解了。当给一个已存在的函数名再次赋值一个函数体时,指向原本函数体的指针便指向了新的函数体,所以没有重载,函数名会指向最新指向的那个函数。

转载于:https://www.cnblogs.com/youhong/p/6507000.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值