JS中的函数
函数对于任何语言来说都是一个核心的概念。通过函数能够封装任意多条语句,而且可以用在任何的地方、任何时候调用执行。ECMAScript中的函数使用function 关键字来进行生命,后边跟一组参数以及函数体。函数的基本语法如下所示:
function functionName(arg0,arg1,arg2,...argN){
statement
}
下边是一个函数的例子
function functionName(name ,message){
console.log('my name is '+name+","+message)
}
functionName('kevin',"what's your name ?")
输出的是:my name is kevin,what’s your name ?
这里有需要注意函数通过函数名来调用,然后里边的参数就是作为变量来使用。
函数中return的特点:
- 在ECMAScript当中函数在定义时不必制定是否返回值。
- 实际上,任何函数在任何时候都可以通过return语句后跟上要返回的值来实现返回值。
- 除了return语句之外,没有任何的声明表示该函数会返回一个值。
- 这个函数会在执行完return之后立即进行退出。因此,位于return语句之后的任何代码永远都不会执行。
- 一个函数中也可以包括多个return 语句。
function Diff(num1,num2){
if (num1<num2){
return num1+"<"+num2;
}
else if (num1>num2){
return num1+">"+num2;
}
else{
return num1+"="+num2;
}
}
var diff = Diff(1,2)
console.log(diff)
这里需要注意的是,这边的return不会输出任何的东西,只有将人return转换成变量的时候,输出变量才会看到这个被执行之后的值是多少。
一般来讲return语句也可以不带任何职,在这种情况下,函数在停止执行后将返回的值是undefined。
需要注意的是在严格模式对函数有一些限制
- 不嗯能够够把函数命名为eval或者arguments;
- 不能够把参数命名为eval或者arguments;
- 不能够出现命名参数相同的情况‘
如果发生上述的情况,就会导致语法错误,代码无法执行。
理解参数
- JS中的参数不限制个数不限制类型,因为JS内部的参数是用一个数组来表示的。实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
- 其实,arguments对象只是与数组类似,他并不是一个array的实力,因为可以使用方括号语法访问他的每一个元素,能够使用length属性来确定传进来多少个参数。
- 这个事实说明了ECMAScript函数的一个重要的特点:命名的参数只是提供比便利,但是并不是必须的。
- 所以利用这一点,开发人员能够让一个函数接收任意多个参数,并且分别利用它们来实现不同的功能。
- 还有一个特点就是arguments参数是能够和参数本身结合使用的。
- arguments的值永远与对应命名参数的值保持同步。但是如果是没有传递值得参数将自动被赋予undefined的值,这就跟定义了变量但是又没有初始化是一样的道理
function doAdd(num1,num2){
arguments[1]=10;
console.log(arguments[1]+num2)
}
doAdd(1,2) // 这输出的是20
注意: 在严格模式中对arguments做出了一些限制。首先,像前面的例子中那样的赋值操作会变得无效。重写arguments的值会导致语法错误
ECMAScript中的所有参数的传递的值,都不可能通过引用传递参数。
没有重载
ECMAScript函数不能够像传统意义上那样实现重载。 而在其他语言当中,例如Java,可以为一个函数编写两个定义,只要这两个定义的签名(接收的参数的类型和数量不同即可)。如前所述ECMAScript的函数是没有签名的,因为其参数是有包含另个或者多个值得数组来表示的。没有函数清明,真正的重载时不可能做到的。
如果在ECMAScript中定义了两个名字相同的函数,则该名字指数与后定义的函数。