javascript——函数

要说javascript中最有意思的东西,那莫过于函数了。因为函数实际上也是对象。每个函数都是Function类型的实例,而且同其他引用类型一样具有属性和方法。函数是对象,那么函数名其实就是指向函数对象的指针。

函数没有重载

重载:函数签名不同,函数名相同。之所以avascript没有重载,其实和上面标红的那句话很有关系。而且ECMAScript函数没有签名。因为参数其实就是arguments对象表示。但是通过检查传入函数中参数的类型和数量做出不同的反应,可以模拟重载的。

function sum(num1, num2){ 
 return num1 + num2; 
} 
alert(sum(10,10)); //20 
var anotherSum = sum; 
alert(anotherSum(10,10)); //20 
sum = null; 
alert(anotherSum(10,10)); //20

正因为函数名只是一个指向函数对象的指针,所以就算是sum为空,那么函数还是存在的。

function addSomeNumber(num){ 
 return num + 100; 
} 
function addSomeNumber(num) { 
 return num + 200; 
} 
var result = addSomeNumber(100); //300

后面的函数覆盖了前面的函数。之所以这样,其实还是和标红的话有关系。试着理解上面的图。只是说addSomeNumber这个指针指向另一个函数对象了而已。

函数声明和函数表达式的区别

区别:函数声明会得到提升,使得在执行任何代码之前可以访问。但是函数表达式必须等到解析器执行到它所在的代码才行。

alert(sum(10,10)); 
function sum(num1, num2){ 
 return num1 + num2; 
}

比如上面这个代码,会正常执行,即使sum函数代码在后面。但是如果后面变成了函数表达式,就会报错。

alert(sum(10,10)); 
var sum = function(num1, num2){ 
 return num1 + num2; 
};

函数中的参数

1、参数个数和数据类型不限制,定义接受多少个参数,实际多或者少都没关系。因为arguments对象来保存的参数。

2、命名的参数只是提供便利,但不是必须的。

3、arguments对应位置的值和命名参数的值是永远保持一致的,但是内存空间是独立的。但是如果命名参数没有值,但是给对应的arguments位置上设置值,其实并不会反应到命名参数上,只会是undefined。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值