html5 - 用普通人能听懂的话回答什么是闭包

查看:116
本文介绍了html5 - 用普通人能听懂的话回答什么是闭包的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我一般都是说,创建一个动态存储空间,突破作用域的限制。让外部可以访问内部的变量,感觉自己答得没什么问题啊,为什么面试完没通知?

解决方案

其实闭包没有那么高深复杂。

仅从规范的角度:

function a() {
    var x = 1, y = 2;
    return function b() {
        console.log(x + y);
    }
}

var f = a();
f();

  1. 在执行a期间,我们可以认为它的局部变量存放在一个内部对象Env里面,a的执行环境保存了对Env的引用。

  2. 在定义b的时候,b也会保存对Env的引用。

  3. a返回时,a的执行环境被销毁,它对Env的引用也就没有了。但是,只要b还可以访问(比如,a通过返回值返回了b)。那么bEnv的引用仍然存在,它仍然可以访问Env中保存的局部变量。

  4. 将来在函数b执行期间,可以通过所谓的作用域链访问到xy

这就是闭包

用图表示就是:

  • 在函数a返回前:

  • 在函数a返回后:

这篇关于html5 - 用普通人能听懂的话回答什么是闭包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆