资讯专栏INFORMATION COLUMN

JS之闭包及其作用

junnplus / 2459人阅读

摘要:如上述代码所显示,闭包是需要函数套函数,其实只是因为我们需要局部变量,否则此变量就会变成全局变量,无法隐藏。闭包的作用可以间接调用函数内部的局部变量。

前言

闭包作为JS中的一大难点,相信许多小伙伴也常常为此疑惑,闭包到底是什么?它有什么用呢?

变量作用域

在学习闭包之前,你必须清楚知道JS中变量的作用域。
JS中变量的作用域无非就全局变量和局部变量,两者之间的关系是函数内部可以直接访问全局变量,但是函数外部是无法读取函数内部的局部变量的。

闭包的诞生

在很多时候,我们想要获取函数的局部变量,但是上述我们已经说过了,正常情况下,这是没办法的,于是,闭包就诞生了。

!function(){
    var n = 1
    function f2(){
        alert(n)//1
    }
}

上述代码就是一个闭包。函数f2被一个立即执行函数所包裹起来了,这时候这个立即执行函数中的所有局部变量对f2而言都是可访问的,所以才可以alert出n为1,但是反过来f2中如果有局部变量,立即执行函数是访问不到的。
这就是Javascript语言特有的"链式作用域"结构(chain scope):子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

值得注意的是,很多人听说闭包是需要函数套函数,然后 return 一个函数。

function foo(){
  var local = 1
  function bar(){
    local++
    return local
  }
  return bar
}

var func = foo()
func()

如上述代码所显示,闭包是需要函数套函数,其实只是因为我们需要局部变量,否则此变量就会变成全局变量,无法隐藏。而return 一个函数,只是因为让外部能使用这个闭包,也就是上述的bar函数。

闭包的定义

说了这么多,闭包到底是什么?闭包其实就是「函数」和「函数内部能访问到的变量」(也叫环境)的总和。

闭包的作用

1.可以间接调用函数内部的局部变量。
2.可以让这些变量的值始终保持在内存中。(因此要注意不能滥用闭包)
3.可以暂存数据,给变量开辟私密空间,避免外部污染。

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

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

相关文章

  • JavaScript闭包(三)

    摘要:目录执行环境与作用域链立即执行函数闭包知识点什么是闭包使用闭包的意义与注意点闭包的具体应用小结这是基本语法的函数部分的第篇文章,主要讲述了中比较重要的知识点闭包在讲闭包之前,在上一篇函数二的基础上,进一步深化执行环境和作用域链的知识点,并补 目录 1.执行环境与作用域链 2. 立即执行函数 3. 闭包知识点 3.1 什么是闭包 3.2 使用闭包的意义与注意点 3.3 闭包的具体应用 4...

    Anonymous1 评论0 收藏0
  • 闭包及其应用

    摘要:闭包带来的问题内存占用由于闭包使用其它函数内的变量,所以垃圾回收机制不会对闭包相关的函数进行回收,占用内存空间。 什么是闭包? 在函数内使用其它函数内的变量,是为闭包 【例1】 function a() { let num = 100; return function b() { console.log(num) } } var c = a() ...

    alexnevsky 评论0 收藏0
  • 【进阶2-1期】深入浅出图解作用域链和闭包

    摘要:本期推荐文章从作用域链谈闭包,由于微信不能访问外链,点击阅读原文就可以啦。推荐理由这是一篇译文,深入浅出图解作用域链,一步步深入介绍闭包。作用域链的顶端是全局对象,在全局环境中定义的变量就会绑定到全局对象中。 (关注福利,关注本公众号回复[资料]领取优质前端视频,包括Vue、React、Node源码和实战、面试指导) 本周开始前端进阶的第二期,本周的主题是作用域闭包,今天是第6天。 本...

    levius 评论0 收藏0
  • 关于js闭包

    摘要:在作用域链中,外部函数的活动对象始终处于第二位,外部函数的外部函数的活动对象处于第三位,直到作用域链终点即全局执行环境。更为重要的是函数在执行完毕后,其他活动对象也不会被销毁,因为匿名函数的作用域链仍然在引用这个活动对象。 原文链接----请点这里   闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的常见方式,就是在一个函数内部创建另一个函数。   之所以一个内部的函数可以...

    livem 评论0 收藏0
  • 作用域链、垃圾回收机制、闭包及其应用(oop)

    摘要:执行环境变量对象活动对象作用域链执行环境,为简单起见,有时也称为环境是中最为重要的一个概念。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。闭包垃圾回收机制先介绍下垃圾回收机制。 执行环境、变量对象 / 活动对象、作用域链 执行环境(executioncontext,为简单起见,有时也称为环境)是JavaScript中最为重要的一个概念。执行环境定义了变量或函数有...

    EastWoodYang 评论0 收藏0

发表评论

0条评论

junnplus

|高级讲师

TA的文章

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