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面向对象编程指南》

    艺无止境,诚惶诚恐, 感谢开源贡献者的努力!!
  • 相关阅读:
    Asp.net2.0 中自定义过滤器对Response内容进行处理 dodo
    自动化测试工具 dodo
    TestDriven.NET 2.0——单元测试的好助手(转) dodo
    JS弹出窗口的运用与技巧 dodo
    ElasticSearch 简介 规格严格
    修改PostgreSQL字段长度导致cached plan must not change result type错误 规格严格
    Linux系统更改时区(转) 规格严格
    mvn编译“Cannot find matching toolchain definitions for the following toolchain types“报错解决方法 规格严格
    ElasticSearch 集群 & 数据备份 & 优化 规格严格
    Elasticsearch黑鸟教程22:索引模板的详细介绍 规格严格
  • 原文地址:https://www.cnblogs.com/d0usr/p/11211020.html
Copyright © 2011-2022 走看看