【1-4】闭包的理解

闭包

某个表达式(通常指函数)可以在其词法作用域外执行时访问其词法作用域

形成原因

function A(){
    var a = 1
    function B(){
        console.log(a)
    }
    return B
}
A()()

嵌套函数A包含B,B被通过某种方式(比如值传递)转移到词法作用域A()之外,当函数A执行完成之后,按常理来说当前作用域A应该被释放,但是,因为B使用了A()中的变量a,而且B没有被释放调,B可能会用到变量a,因为变量a有被引用次数,所以a不被释放。

闭包应用

我一直把闭包当作一种特性,当我需要一个封闭的,可长期存在的环境(作用域)的时候,可以考虑构造闭包环境来实现。

let构造闭包环境

for(let i = 0;i < 10; i++) {
    setTimeout(function timer(){
        console.log(i)
    })
}

函数包裹形成闭包环境

for(var i = 0;i < 10; i++) {
    (function(i) {
        setTimeout(function timer(){
            console.log(i)
        })
    })(i)
}

同时可以发现,使用IIFE可以模拟块级作用域哦

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容