ECMAScript 中的函数使用function 关键字来声明,后跟一组参数以及函数体。函数的基本语法以下所示:数组
function functionName(arg0, arg1,...,argN) { statements }
函数示例:函数
function sayHi(name, message) { alert("Hello " + name + "," + message); }
调用sayHi()函数的代码以下所示:spa
sayHi("Nicholas", "how are you today?");
ECMAScript 中的函数在定义时没必要指定是否返回值。code
function sum(num1, num2) { return num1 + num2; }
调用这个函数的示例代码以下:对象
var result = sum(5, 10);
这个函数会在执行完return 语句以后中止并当即退出。blog
ECMAScript 函数不介意传递进来多少个参数,也不在意传进来参数是什么数据类型。ip
ECMAScript 中的参数在内部是用一个数组来表示的。ci
函数也能够像下面这样重写,即不显式地使用命名参数:string
function sayHi() { alert("Hello " + arguments[0] + "," + arguments[1]); }
命名的参数只提供便利,但不是必需的。io
经过访问arguments 对象的length 属性能够获知有多少个参数传递给了函数。下面这个函数会在每次被调用时,输出传入其中的参数个数:
function howManyArgs() { alert(arguments.length); } howManyArgs("string", 45); //2 howManyArgs(); //0 howManyArgs(12); //1
函数可以接收任意个参数并分别实现适当的功能。
function doAdd() { if(arguments.length == 1) { alert(arguments[0] + 10); } else if (arguments.length == 2) { alert(arguments[0] + arguments[1]); } } doAdd(10); //20 doAdd(30, 20); //50
arguments 对象能够与命名参数一块儿使用。
function doAdd(num1, num2) { if(arguments.length == 1) { alert(num1 + 10); } else if (arguments.length == 2) { alert(arguments[0] + num2); } }
arguments 对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。
没有传递值的命名参数将自动被赋予undefined 值。
ECMAScript 函数不能像传统意义上那样实现重载。ECMAScirpt函数没有签名,由于其参数是由包含零或多个值的数组来表示的。而没有函数签名,真正的重载是不可能作到的。
若是在ECMAScript 中定义了两个名字相同的函数,则该名字只属于后定义的函数。
function addSomeNumber(num){ return num + 100; } function addSomeNumber(num) { return num + 200; } var result = addSomeNumber(100); //300