JS闭包

  1. 词法作用域:
    词法作用域的一个例子:在 JavaScript 中,变量的作用域是由它在源代码中所处位置决定的(显然如此),并且嵌套的函数可以访问到其外层作用域中声明的变量。
  2. 定义:闭包是一个函数和函数所声明的词法环境的结合
    闭包是一种特殊的对象。它由两部分构成:函数,以及创建该函数的环境。环境由闭包创建时在作用域中的任何局部变量组成。
  3. 一般说来,可以使用只有一个方法的对象的地方,都可以使用闭包。
  4. 一个闭包可以返回一个函数,也可以返回多个函数。
    在返回一个函数的时候,若创建多个实例,同一个函数定义体,不同的词法环境,alert()的值也不同。每个闭包有自己的词法环境。例如:
    function maker(v){
        let a=v;
        return function(){
            alert(a);
        }
    }
    const maker1=maker(1);//1
    const maker2=maker(2);//2
    const maker3=maker(3);//3

一个函数体在返回多个函数的时候,例如(一个提供加减法的函数,只要传入被操作的值,就可以获取对加减法,一个实例可以共享一个词法环境,并有多个函数使用):

function Counter(){
    const base=0;
    return {
        add:function(){return ++base;},
        plus:function(){return --base;}
    }
}
const c=Counter();
c.add();
c.plus();

5.闭包使用注意点:
对捕获的变量只是个引用,而不是复制;
符函数每调用一次,会产生不同的闭包;
在循环问题中要注意变量的变化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值