• 35648

    文章

  • 23

    评论

  • 20

    友链

  • 最近新加了很多技术文章,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

JS之闭包及其作用

欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/jsh/2019/0808/104749.html 1190000020001852

前言

闭包作为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.可以暂存数据,给变量开辟私密空间,避免外部污染。

相关文章

暂住......别动,不想说点什么吗?
  • 全部评论(0
    还没有评论,快来抢沙发吧!