闭包

作者: 我就是L | 来源:发表于2017-02-13 21:45 被阅读12次
执行环境

在javscript中执行环境主要分为两种

  • 全局执行环境:NodeJs中为global,所有的全景属性和方法全都挂在gloabl上,可以在任意地方访问,其生命周期直至程序退出时销毁。
  • 函数执行环境:当执行一个函数时,v8引擎进入函数执行环境,函数代码执行完毕则销毁。

所有的执行环境以栈的形式管理,底部是全局执行环境,顶部是当前函数执行环境。

function outer() {
    function inner() {

    };
    inner();
}
outer();

执行outer函数时执行环境栈为:(顶部)inner函数执行环境-outer函数执行环境-global全局执行环境(底部)

每一个执行环境都对应一个变量对象,保存着形参var定义的变量函数声明

作用域链

作用域链是当前执行环境所关联变量对象列表,在函数定义时创建,当查找变量时,从自身变量对象一直向父环境变量对象查找(就近原则)

//test.js
color = 'yellow';
var color = "blue";
function getColor() {
    var color = "red";
    return color;
}
console.log(getColor());

这里存在三个执行环境,因此关联三个变量对象,1是函数getColor之内,1是getColor之外test.sj文件之内,3是全局global,查找变量时依次从1-2-3顺序查找,找到即停。
** ps:一般js中的全局变量直接挂载在global上,nodejs把js文件封装进了函数 **

闭包

闭包是一个可以访问其他函数内部变量的函数。

  • 闭包可以用来访问函数内部变量
  • 闭包缓存变量于内存

闭包实现获取函数调用次数

function compute() {
    var _object = {};
    function finalCompute() {
        var key = finalCompute.caller.toString().match(/function\s*([^(]*)\(/)[1] || '匿名函数';
        if (!_object[key])
            _object[key] = 0;

        _object[key] += 1;
        console.log(`第${_object[key]}次调用function ${key}`);
    }

    return {'finalCompute': finalCompute, '_object': _object};
}
const com      = compute();

闭包实现累加

function add() {
    var _total = 0;
    return function (para) {
        _total += para;
        return _total;
    }
}
var ADD = add();

闭包实现缓存

const co = function () {
    let cache = null;
    return function (a, b) {
        if (!cache) {
            cache = a * b;
            console.log('超时计算');
        }
        return cache;
    }
};

const user = co();
console.log(user(3, 4));
console.log(user(5, 6));

相关文章

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • 闭包,闭包,闭包

    1、这家伙到底是什么? 网上关于这个的讨论的太多了太多了,有各种的举例子,但是大部分还在寻找这个答案的小伙伴对于变...

  • 闭包-Closures [swift 5.1]

    闭包的语法 尾随闭包 闭包逃离 自动闭包

  • Day7 闭包(Closures)

    本页包含内容:• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包 1、闭包表达式 闭包...

  • Python闭包

    闭包 = 环境变量 + 函数 调用闭包内部的环境变量 闭包的经典误区 闭包与非闭包实现人类走路 非闭包 闭包

  • 闭包(closure)

    ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...

  • swift- 闭包一

    /*• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包*/

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

  • Swift-进阶 :闭包(二)逃逸闭包 & 非逃逸闭包

    本文主要分析逃逸闭包 、非逃逸闭包、自动闭包 逃逸闭包 & 非逃逸闭包 逃逸闭包定义 当闭包作为一个实际参数传递给...

  • javascript闭包详解

    跟我念 bi 闭 bao包 ,闭包的闭,闭包的包。。 闭包的简介 在计算机科学中,闭包(英语:Closure),又...

网友评论

    本文标题:闭包

    本文链接:https://www.haomeiwen.com/subject/jozzittx.html