函数对任意语言来说都是一个核心概念。通过函数可以封装任意多条语句,而且可以在任何地方任何时候调用执行。ECMAScript中的函数使用function关键字来声明,后跟一组参数以及函数体。
function functionName(arg0,arg2....,argN){
statements
}
function sayHi(name,message){
alert("hello"+name+","+message)
};
sayHi("Nin","how are you"); 可以通过函数名来调用。
ECMAScript中的函数在定义是不必指定是否返回值。实际上任何函数在任何时候都可以通过return语句后要返回的值来实现返回值。
function sum(num1,num2){
return num1 + num2;
}
return语句也可以不带有任何返回值。在这种情况下,函数在停止执行后将返回undefined值,这种语法一般用在需要提前停止函数执行而又不需要返回值的情况下
function sum(num1,num2){
return;
alert(11); //永远不会被执行。
}
严格模式对函数有一些限制;
· 不能把函数命名为eval和arguments
· 不能把参数命名为eval和arguments
· 不能出现两个命名参数同名的情况
如果发生以上错误就会导致语法错误,代码无法执行。
理解函数
ECMAScript 函数的参数与大多数其他语言中的函数的参数有所不同。它不介意传递进去多少个参数,也不在乎传进去参数是什么数据类型。
ECMAscript中的参数在内部是用一个数组来表示的。函数接收到的始终是这个数组,而不关心数组找那个包含哪些参数。如果这个数组中不包含任意元素,无所谓,如果包含多个元素也没有问题。实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取的传递给函数的每个参数。
arguments对象只是与数组类似,它并不是Array的实例。因为可以使用方括号语法访问它的每个元素(第一个元素是arguments[0],第二个元素是arguments[1]以此类推)
参数:没有传递值的命名参数将自动被赋予undefined值。这个跟定义变量但没有初始化一样。
没有重载
ECMAScript函数不能像传统意义上那样实现重载。函数没有签名,因为其参数是由包含零活多个值的数组来表示。而没有函数签名,真正的重载是不可能做到的。
如果在ECMAScript中定义两个名字相同的函数,则该名字值只属于后定义的函数。
function add(num){
return num+100;
}
function add(num){
return num+200;
}
var result = add(100); //300