JS函数分类

1、返回函数的函数

代码示例:

function getFunc(argument) {
    return function() {
        console.log("new function");
    }
}

var newFunc = getFunc();
newFunc();        // 调用返回的函数

因为函数始终都会有一个返回值,即便不是显式返回,它也会隐式返回一个undefined。既然函数能返回一个唯一值,那么这个值就也有可能是另一个函数。

2、内部函数

代码示例:

function outer(param) {

    var inner = function(theinput) {
        return theinput * 2;
    }

    return inner(param);
}

console.log(outer(2));            // 输出 4
console.log(typeof inner)        // 输出 undefined

本地函数 inner 在 outer 以外的地方是不可见的,所以我们将它称之为内部私有函数。使用内部私有函数的好处就是,我们只需要将一些必要的函数暴露给“外部世界”,隐藏内部的实现细节。

3、匿名函数

代码示例:

function one() {
    return 1;
}

function two() {
    return 2;
}

function add(one, two) {
    return one() + two();
}

var num = add(one, two);
console.log(num);        // 输出3

又或者如下定义:

function add(one, two) {
    return one() + two();
}

var num = add(
        function() {
            return 1;
        },
        function() {
            return 2;
        }

    );

console.log(num);    // 输出 3

在 Javascript 中使用匿名函数的方式,一般用于执行一次性任务,并且代码显的更简洁,也有助于提升性能,当我们将函数 A 作为参数传递给函数 B,并由 B 来执行 A 时,A 就成了一个回调函数。如果这时 A 还是一个匿名函数,我们就称它为匿名回调函数。使用这个特性,我们再来实现一个对数组中每个数求平方值的例子:

function testSquare(items, callback) {
    var i, result = [];
    for (i = 0; i < items.length; i++) {
        result[i] = callback(items[i]);
    }
    return result;
}

var result = testSquare([2, 3, 4], function(num) {
    return num ** 2;
});

console.log(result);        // 输出 [ 4, 9, 16 ]

4、即时函数

在 JavaScript 中即时函数表示可以在定义后立即调用。通常适合于执行一些一次性的或初始化的任务。好处是不会产生任何全局变量,当然,缺点在于这样的函数是无法重复执行的。主要定义的方式有如下三种:

// 第一种定义方式
(function() {
    console.log("init...")
})();
// 第二种定义方式
(function() {
    console.log("init...")
}());
// 第三种定义方式
var num = function() {
    return 1;
}();

console.log(num);    // 输出 1

 

参考书籍:《JavaScript面向对象编程指南》

posted @ 2019-07-19 06:25  d0usr  阅读(760)  评论(0编辑  收藏  举报