zoukankan      html  css  js  c++  java
  • 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面向对象编程指南》

    艺无止境,诚惶诚恐, 感谢开源贡献者的努力!!
  • 相关阅读:
    VS2015&windows开发环境配置
    Chapter 12. Classes
    Chapter 11. Generic Algorithms
    Chapter 10. Associative Containers
    Chapter 9. Sequential Containers
    Chapter 8. The IO Library
    Chapter 7. Functions
    Chapter 5. Expressions
    案例分析 极化跳变
    机器如果能够实现自己建模,应该是下一次人工智能的飞跃点
  • 原文地址:https://www.cnblogs.com/d0usr/p/11211020.html
Copyright © 2011-2022 走看看