美文网首页
日志 JavaScript 闭包

日志 JavaScript 闭包

作者: YucinChow | 来源:发表于2019-05-12 02:01 被阅读0次
function fn1(){
    var i = 0;
    function fn2(){
        i++;
        console.log(i)
    }
    return fn2;
}

var fn3 =  fn1();
fn3();

f2是一个闭包,fn1拥有一个局部变量i,fn1调用结束后,其变量i因为被fn2引用,所以并没有被垃圾回收。

从作用域链的角度理解闭包

实际上,当我们创建一个函数时,[[Scope]]也被创建,[[Scope]]是函数的一个属性(property),它包含了parent的context的VO/AO。而当进入函数上下文时则VO/AO被创建,并进行一些操作,当执行上下文代码时,变量的值被修改。

Scope = VO + [[Scope]];

理解了这个概念后,再看上面的例子:由于fn2的context的属性AO中并没有找到变量i,所以将会往其原型链上查找,同样也查找不到,此时便会向上一级的context的VO/AO属性上查找,最后在fn1的AO上找到变量i。并且由于[[Scope]]是在函数创建时就存在的,所以即使fn1执行完,fn2仍然可以找到变量i。

相关文章

  • 日志 JavaScript 闭包

    f2是一个闭包,fn1拥有一个局部变量i,fn1调用结束后,其变量i因为被fn2引用,所以并没有被垃圾回收。 从作...

  • [转载]学习JavaScript闭包(Closure)

    阮一峰的网络日志-学习Javascript闭包(Closure) David Flanagan-JavaScrip...

  • JavaScript----闭包

    javascript之闭包 闭包的概念     闭包(closure)是 JavaScript 的一种语法特性。 ...

  • 学习JavaScript闭包和作用域笔记

    JS JavaScript闭包和作用域 闭包 JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外...

  • javascript中闭包是什么

    javascript中闭包是什么 JavaScript 变量可以是局部变量或全局变量。私有变量可以用到闭包。闭包就...

  • Javascript 闭包

    闭包 (注:所以案例以 javascript 实现) 初识闭包 什么是闭包 MDNClosures are fun...

  • 作用域闭包

    概览 背景知识:JavaScript内存管理、JavaScript作用域。 内容 1 闭包定义 闭包:当函数可以记...

  • JavaScript 作用域

    概览 背景知识:JavaScript内存管理、JavaScript作用域。 内容 1 闭包定义 闭包:当函数可以记...

  • 20170815 前端开发日报

    JavaScript闭包,只学这篇就够了 闭包不是魔法 这篇文章使用一些简单的代码例子来解释JavaScript闭...

  • JavaScript深入理解-闭包(Closure)

    推荐文章:学习Javascript闭包(Closure)- 阮一峰javascript深入理解-从作用域链理解闭包...

网友评论

      本文标题:日志 JavaScript 闭包

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