第6章 函数与闭包
6.1 函数声明语句与匿名函数表达式
可以通过函数声明语句与匿名函数表达式对函数进行声明。
6.2 函数调用的分类
将以方法调用的方式使用的函数称为方法,同理,将以构造函数调用方式使用的函数称为构造函数。
函数声明语句的后置
通过函数声明语句声明的函数,可以在进行声明的代码行之前就对其调用。
function hzh1() {
hzh2(); // 在声明函数fn之前对其进行调用
function hzh2() {
console.log('黄子涵');
}
}
hzh1();
通过函数声明语句声明的函数,可以在进行声明的代码行之前就对其调用。在通过匿名函数表达式进行定义的情况下结果将会不同。
function hzh3() {
hzh4();
var hzh4 = function() {
console.log('黄子涵');
}
}
hzh3();
6.3 参数与局部变量
6.3.1 arguments 对象
// 可以通过在函数内使用 arguments 对象来访问实参。
function hzh1() {
console.log(arguments.length);
console.log(arguments[0], arguments[1], arguments[2]);
}
console.log("arguments.length 为实参的数量,值为1");
console.log("arguments[0]的值为7");
console.log(hzh1(7));
console.log("*********************************************");
console.log("arguments.length 为实参的数量,值为2");
console.log("arguments[0] 的值为7,arguments[1] 的值为8");
console.log(hzh1(7, 8));
console.log("*********************************************");
console.log("arguments.length为实参的数量,值为1");
console.log("arguments[0]的值为7");
console.log("arguments[1]的值为8");
console.log("arguments[2] 的值为9");
console.log(hzh1(7, 8, 9));
没有相对应的形参的实参也可以通过 arguments 访问。由于能够通过arguments.length 获知实参的数量,因此可以写出所谓的可变长参数函数。而形参的数量则可以通过 Function 对象自身的 length 属性来获得。
虽然 arguments 可以以数组的方式使用,不过它本身并不是数组对象。因此,无法对其使用数组类中的方法。
6.3.2 递归函数
// 递归函数是一种在函数内对自身进行调用的函数
// 这种方式被称为递归执行或递归调用
function hzh1(hzh2) {
if(hzh2 <= 1) {
return 1;
} else {
return hzh2 * hzh1(hzh2 - 1);
}
}
console.log("调用函数hzh1:");
console.log(hzh1(5));