美文网首页
闭包 (老哥,你确定你解释的对吗...)

闭包 (老哥,你确定你解释的对吗...)

作者: 谁家智障 | 来源:发表于2017-12-19 21:36 被阅读0次

讲道理看了Javascript高级程序设计对比包的解释,终于有点对闭包稍微有点概念了。

作者的观点是只要在一个函数中定义了其ta函数,就创建了闭包。而闭包有权访问包含闭包的函数作用域。

这里个人的理解是函数A内定义的那个函数Aa,这个Aa在函数A内部定义,拥有了自己的作用域、包含闭包的函数A的作用域以及全局作用域。而闭包只要不被销毁,自然可以一直保存包含闭包的函数A的作用域。

function A(){
    let count = 0;
    function Aa(){
        return count++;
    }
    return Aa;
}
const B = A();//将闭包函数Aa扔给B
console.log(B(), B(),);//0 1

这里加上作用域链的解释可能我觉得可能更容易理解哇。每个函数都有一个执行环境,内部包含了一个相关的变量对象(变量对象内部是当前执行环境的所有变量和方法)。代码在一个环境中执行时,会创建变量对象的一个作用域链。在上文闭包Aa执行时,作用域链中依次包含了当前Aa的变量对象——外部A的变量对象——全局环境的变量对象。也就是说函数A执行完毕后,虽然A的执行环境被销毁了,但是Aa中还保存了A的变量对象,除非闭包Aa也被销毁了。这就解释了代码中调用三次B函数,每次count变量的值都被保存在了内存中。

function A(){
    let count = 0;
    function Aa(){
        return count++;
    }
    return Aa;
}
let B = A();
console.log(B());//0
B = null;
B = A();
console.log(B());//0

因此更改代码,将闭包销毁后再启用,内存中的count就被回收了。

暂时就这么多,之后学的更深入了发现理解不对再更改。

相关文章

  • 闭包 (老哥,你确定你解释的对吗...)

    讲道理看了Javascript高级程序设计对比包的解释,终于有点对闭包稍微有点概念了。 作者的观点是只要在一个函数...

  • 什么是闭包(Closure)?

    如果不用代码来演示,你很难单用话语把它解释清楚 维基百科的解释 在计算机科学中,闭包(Closure)是词法闭包(...

  • 【译】JavaScript进阶 从实现理解闭包

    来源于 现代JavaScript教程闭包章节中文翻译计划本文很清晰地解释了闭包是什么,以及闭包如何产生,相信你看完...

  • 深入解析Javascript闭包及实现方法

    一、什么是闭包和闭包的几种写法和用法 1、什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的...

  • 闭包

    1 闭包的含义 1.1MDN上对闭包的解释 函数和对其周围状态(lexical environment,词法环境)...

  • 闭包、原型、原型链【前端面试问题(一)】

    一、闭包 什么是闭包?闭包你了解吗? 闭包就是能够读取其他函数内部变量的函数。 通俗一点呢? 通俗的讲就是函数a的...

  • 关于Javascript闭包的总结

    关于闭包这个词的解释 维基百科中对于闭包的经典解释: 在计算机科学中,闭包(Closure)是词法闭包(Lexic...

  • 一文搞定闭包原理

    前言 闭包是JS中重要的内容,对大多数人来说都会觉的闭包本身很好理解,不就是一个函数嵌套一个函数吗?但是再深入解释...

  • 深入理解javascript闭包

    网上关于闭包的文章很多,各种专业文献上的“闭包”定义非常抽象,很难看懂。官方对闭包的解释是:一个拥有许多变量和绑定...

  • 2019-07-02

    你的工作经历 会用的技术 闭包是什么 闭包的优缺点 父子组件传值 父组件内部子组件操作(意在问插槽) 如何确定操作...

网友评论

      本文标题:闭包 (老哥,你确定你解释的对吗...)

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