第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));

6.4 作用域

6.5 函数是一种对象

6.6 Function类

6.7 嵌套函数声明与闭包

6.8 回调函数设计模式

相关