JavaScript函数的实参和形参
在《JavaScript权威指南 》
中有这样一句话:
JavaScript函数是参数化的:函数的定义会包括一个称为形参(parameter)的标识符列表,这些参数在函数体中像局部变量一样工作。函数调用会为形参提供实参的值。函数使用它们实参的值来计算返回值,成为该函数调用表达式的值。
形参相当于函数中定义的变量,实参是在运行时的函数调用时传入的参数。
举个例子:
function myFunction(param1, param2){
//你的代码
}
myFunction(1, 2);
在这个例子中,param1和param2就是形参,1和2就是实参。
可选形参
可变长的实参列表:实参对象
在函数体内,标识符arguments是指向实参对象的引用,实参对象是一个类数组对象,这样可以通过数字下标就能访问传入函数的实参,而不用非要通过名字来得到实参。(arguments并不是真正的数组,它是一个实参对象。它是一个对象,只是具有数字索引的属性。)
实参对象的callee和caller属性
var factorial = function (x){
if (x <= 1){
return x * arguments.callee(x - 1);
}
};
caller是非标准的,但大多数浏览器都实现了这个是属性,它指代调用当前正在执行的函数的函数。通过caller属性可以访问调用栈。
将对象属性用做实参
实参类型
笔记开头说过,JavaScript方法的形参并未声明类型,在形参传入函数体之前也未做任何类型检查。JavaScript在必要的时候会进行类型转换。因此如果函数期望接收一个字符串参数,而调用函数时传入其他类型的值,所传入的值会在函数体内将其用做字符串的地方转换为字符串类型。
以上笔记整理自《JavaScript权威指南》/《JavaScript高级程序设计(第3版)》,用做个人学习分享。