JS高级闭包

闭包

所以闭包会使本来该被销毁的作用域链,由于被外部函数引用,所以此内部函数的作用域链就没有销毁

1、满足以下两个条件,才形成闭包

a、函数内部嵌套函数,嵌套的内部函数引用外部的标识符(数据)

b、内部函数被外部调用(返回嵌套的内部函数)

function box1() {
    let a = 0;
    function box3() {
        console.log(a);
    }
    return box3;
}
let box2 = box1();
box2() // 0

为什么使用闭包

1.解决无法使用内部变量、函数、数组…(延长变量的使用范围)

2.解决全局变量污染的问题(变量私有化)

function f69() {
    let index = 0;
    return function f68() {
        console.log(index++);
    }
}
let cc = f69()
cc(); // 0
cc(); // 1
cc(); // 2

自由变量

函数内部使用外部的变量,这个变量就是自由变量

注:跨作用域的变量都是自由变量,即变量的使用和声明不在同一个作用域
let i = 0;
function f70() {
    let j = 2
    function f71() {
        let k = 5;
        // 此处使用的 i 和 j 都是自由变量,k 不是
        console.log(i + j + k);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值