JS闭包的深入理解(详解1)

OK,如果说到JS中的闭包,给我的感觉就是它能很好地体现出JS函数式编程的特点。
它不同于我们之前学的C,C++,JAVA中,函数只能被声明,调用,或者是类的成员方法。

在JS中,函数可以赋值给一个变量,而JS又是弱类型语言,所以在JS中函数就可以作为参数或者是返回值(这一点就是蛮好玩的)。

OK,了解了上面,我们就来看一下什么是闭包?
定义:函数嵌套函数,并且内层函数作为返回值,引用外部函数的参数或变量。
乍一看似乎不好理解,emmm,我们就通过例子来一步步理解闭包的概念。

例子一

function f1() {
           var a = 0;
           return function () {
               return a+5;
           }
        }

来看一下这个简单的例子。
正好满足闭包函数的特点。
嘶,那如果我们打印一下f1(),会是什么样子呢?

        var f=f1();
        console.log(f);

ƒ () {
return a+5;
}

打印出来一个函数,而且正好是内层函数。

那如果我现在再打印f()呢。

      console.log(f());

5

没啥毛病似乎,现在是不是有点理解闭包的意思了。
再来一张图来深刻理解一下:
在这里插入图片描述

例子二

function f2() {
            var a = 0;
            return function () {
                return a++;
            }
        }
        f=f2();
        console.log(f());
        console.log(f());
        console.log(f());
        f=f2();
        console.log(f());
        console.log(f());
        console.log(f());

如果我们碰到这样的例子,我们记住一点,外层函数只要不被调用第二次,那么外层函数的参数或者变量的值就不会被冲刷,也就是说对于内层函数而言,外层函数的变量可以看成“全局变量”。
输出结果为:

0
1
2
0
1
2

现在我们再用图来看一下:
在这里插入图片描述
OK,我们再来一个例子看看应该就差不多了:

例子三

function f3() {
            var a = 0;
            return function () {
                return ++a;
            }
        }

        console.log(f3()());
        console.log(f3()());
        console.log(f3()());

如果上面两个理解了的话,这个应该也能猜出来结果吧:

1
1
1

这个例子我们直接用图解来看一下:
在这里插入图片描述
这个不就相当于外层函数调用了3次,所以a也被重置成0三次。
所以会输出三个1.

OK,这一篇文章主要用来理解闭包的概念。
END,结束。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值