资讯专栏INFORMATION COLUMN

初识闭包

邹强 / 1178人阅读

摘要:写文章之前,查阅了很多的资料,也看了很多大牛对闭包的解释,现在总算是对闭包有了一定的理解。那么如果我们要访问中的该怎么办呢这个时候就需要引入闭包了。闭包的作用闭包除了能访问函数内部的局部变量,还有一个作用就是将函数内部的变量值储存到内存中。

写文章之前,查阅了很多的资料,也看了很多大牛对闭包的解释,现在总算是对闭包有了一定的理解。

作用域

可能你会问:明明是讲闭包,为什么又讲作用域了? 在理解闭包之前我们首先要明白JavaScript中变量作用域的概念,我们都知道JavaScript的变量分为局部变量和全局变量,比如:

var global = 1;

function f1() {
    var local = 2;
    console.log(global )    // 1
    console.log(local)    // 2
}

console.log(global )    // 1
console.log(local)    // local is not defined

在上面示例中global是全局变量,因此可以在任何地方访问它,而local是定义在函数f1()中的局部变量,因此只能在f1()中访问。那么如果我们要访问f1()中的local该怎么办呢? 这个时候就需要引入闭包了。

闭包的概念

现在我们来说什么是闭包,我所理解的闭包就是就是可以访问其他函数内部的函数。同样像前面的例子,我们现在就用闭包来实现在函数外部访问local变量

function f1() {
    var local = 2;
    function bar() {
        console.log(local++)
    }
    return bar
}

var func = f1();
func();    // 2
func();    // 3

这个时候我们相当于通过函数bar()间接的访问到了函数f1()中的局部变量local,因此在func()第一次执行的时候我们得到local=2,但是为什么第二次调用func()得到的local却等于3呢? 按理说我第二次调用func()应该是从f1()中的第一句 var local = 2 开始执行啊。这就涉及闭包的另一个作用了。

闭包的作用

闭包除了能访问函数内部的局部变量,还有一个作用就是将函数内部的变量值储存到内存中。

在上面的示例中,f1()的返回值是bar()函数,我们调用func()的时候其实就是在调用bar(), 而bar()定义在f1内部,是依赖f1()而存在的,因此调用bar时将f1()中的local变量放入了内存中,在第二次调用的时候自然也就从内存中得到了local++后的值。

本文参考文章:http://www.cnblogs.com/cxying... http://www.ruanyifeng.com/blo...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82869.html

相关文章

  • 初识EMCASCRIPT 模块化

    摘要:到目前为止,我们完成了模块的简易定义与使用。但是模块化的一大精髓是命名空间,就是按需导入,而此时却是一个全局变量。 为什么需要模块化? 当我们在html中调用一个js函数时,如果我们把这个函数写在另外的一个js文件中,那么调用的时候我们需要在html的头部引入那个js文件。 index.html Hello world index.js func...

    Bamboy 评论0 收藏0
  • JavaScript中的闭包

    摘要:但是,不合理地滥用闭包,也会造成很多性能问题,从而使项目维护成本增加。 前言 相信很多小伙伴在工作或者面试过程中都遇到过这个问题,作为经典的前端面试题之一,它高频地出现在我们的求职生涯中。所以,了解和掌握它也就变得十分必要了 读完这篇文章,你或许就会知道: 闭包是什么,它是怎么形成的 为什么要使用闭包 闭包会造成哪些问题 如果文章中有出现纰漏、错误之处,还请看到的小伙伴多多指教,先...

    AaronYuan 评论0 收藏0
  • Java8-1-初识Lambda表达式与函数式接口

    摘要:而在中,表达式是对象,它们必须依附于一类特别的对象类型函数式接口。即表达式返回的是函数式接口类型。 Java8被称作Java史上变化最大的一个版本。其中包含很多重要的新特性,最核心的就是增加了Lambda表达式和Stream API。这两者也可以结合在一起使用。首先来看下什么是Lambda表达式。Lambda表达式,维基百科上的解释是一种用于表示匿名函数和闭包的运算符,感觉看到这个解释...

    jzman 评论0 收藏0
  • 【连载】前端个人文章整理-从基础到入门

    摘要:个人前端文章整理从最开始萌生写文章的想法,到着手开始写,再到现在已经一年的时间了,由于工作比较忙,更新缓慢,后面还是会继更新,现将已经写好的文章整理一个目录,方便更多的小伙伴去学习。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 个人前端文章整理 从最开始萌生写文章的想法,到着手...

    madthumb 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<