JavaScript 高级程序设计学习笔记4——函数

基本概念

函数基本语法:
function functionName(arg0, arg1,...,argN) {
    statements
}

eg:

function sayHi(name, message) {
    alert("Hello " + name + "," + message);
}
函数调用:functionName(arg0, arg1,...,argN);

sayHi("Nicholas", "how are you today?");
输出结果:弹出 "Hello Nicholas,how are you today?"

函数返回值

任何函数、任何时候都可以通过 return 语句后跟要返回的值来是实现返回值。函数会在执行完 return 语句后停止并立即退出。因此,return 之后的任何代码都永远不会执行。

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

调用:

var result = sum(5, 10);  // result 为15

注:
return 可以不带任何返回值。则函数将返回 undefined 值。一般用在需要提前停止函数执行,又不需要返回值的情况下。
推荐:要么让函数始终都有返回值,要么就永远都不要有返回值,否则会给代码调试带来不便。
严格模式下的限制: 发生以下情况,会导致语法错误,代码无法执行。
不能把函数/参数命名为eval 或arguments;
不能出现两个命名参数同名的情况。

理解参数

ECMAScript 函数不介意传递的参数的个数及类型,即使个数与定义的个数不同,也不会报错。因为参数在内部使用一个数组来表示的。
函数体内部可以通过 arguments 对象来访问这个参数数组,从而获取传递过来的每一个参数。

function sayHi(name, message) {
    alert("Hello " + name + "," + message);
}

可以像下面这样重写

function sayHi() {
    alert("Hello " + arguments[0] + "," + arguments[1]);
}

ECMAScript 函数的重要特点:
命名的参数只提供便利,但不是必需的;在调用时,对应参数名字不一定要一致;aruments 对象可以与命名参数一起使用;arguments 的值永远与对应命名参数的值保持同步;arguments 对象的长度由传入函数的参数决定,而非定义函数时的命名参数个数;没有传递值的命名参数自动被赋予 undefined 值,类似于定义了变量但未初始化。
下面这个函数会在每次被调用时,输出传入其中的参数个数:

function howManyArgs() {
    alert(arguments.length);
}
howManyArgs("string", 45); //2
howManyArgs(); //0
howManyArgs(12); //1

严格模式下:
严格模式对如何使用arguments 对象做出了一些限制。首先,像前面例子中那样的赋值会变得无效。也就是说,即使把arguments[1]设置为10,num2 的值仍然还是undefined。其次,重写arguments 的值会导致语法错误(代码将不会执行)。

没有重载

ECMAScript 函数不能像传统意义上那样实现重载。如果在ECMAScript 中定义了两个名字相同的函数,则该名字只属于后定义的函数。
通过检查传入函数中参数的类型和数量并作出不同的反应,可以模仿方法的重载。

你可能感兴趣的:(JavaScript 高级程序设计学习笔记4——函数)