资讯专栏INFORMATION COLUMN

什么是闭包?变量作用域和闭包。

U2FsdGVkX1x / 1219人阅读

摘要:在上面的代码中,函数实际上就是函数的闭包函数,我们让其执行三次,结果分别为。这是因为,函数中的局部变量一直被保存在内存中。所以闭包有个缺点,就是内存占用较大。自执行函数上面这段函数也是闭包的一种。我们利用闭包来做一个小例子。

变量作用域和闭包 变量作用域

当我们写 js 文档的时候经常会设置变量,变量的类型有两种:

全局变量

局部变量

这两种类型的变量有者不同的作用范围,全局变量的作用范围是面向整个文档的,可以称之为全局作用域,局部变量是在函数内部设置的,作用范围为当前的函数,外部不能直接引用,因此称为函数作用域。

var a=1;
function test(){
    var b=2;
    console.log(a) 
}
test()// 1
console.log(b) //error
闭包

简单来说嵌套在函数里的函数以及周边的变量叫闭包

闭包周边的变量在执行完函数之后不会被释放,会常驻内存

function test(){
    var a = 1;
    function test1(){
        var b = 2
    }return test1
}
var test2=test()
test2();

上面的代码就是一段闭包,函数test1被包裹在函数test中,对于test1而言,test内的所有变量都是可见的,但是反过来不行。将test1作为返回值,就可以在test外部进行读取了。

function test(){
    var a = 1;
    function test1(){
        a++
        console.log(a)
    }return test1
}
var test2=test()
test2();//2
test2();//3
test2();//4

在上面的代码中,函数test2实际上就是函数test1的闭包函数,我们让其执行三次,结果分别为2、3、4。这是因为,函数test中的局部变量一直被保存在内存中。所以闭包有个缺点,就是内存占用较大。

自执行函数

var callback=(function(){
    var a = 1;
    function test(){
        a ++;
        console.log(a)
    }
    return test;
})();
callback();2
callback();3

上面这段函数也是闭包的一种。

我们利用闭包来做一个小例子。


    
  • 1
  • 2
  • 3

我们创建了一个列表,当我们点击列表的时候,浏览器将列表里的内容弹窗显示。

END

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

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

相关文章

  • 什么闭包变量作用域和自执行函数

    摘要:作用域和闭包以及自执行函数作用域作用域分为种全局作用域全局作用域就是在的任何位置都能访问过函数作用域只能在函数里面调用的称之为函数作用域闭包嵌套在函数里面的函数及周边的变量叫闭包闭包存在的问题是周边变量不会被释放,常驻内存中闭包的缺点消耗内 作用域和闭包以及自执行函数 作用域 作用域分为2种 1、全局作用域 全局作用域就是在js的任何位置都能访问过 2、函数作用域 只能在函数里面调用的...

    daydream 评论0 收藏0
  • JavaScript面向对象~ 作用域和闭包

    摘要:大名鼎鼎的作用域和闭包,面试经常会问到。声明理解闭包,先理解函数的执行过程。闭包的基本结构因为闭包不允许外界直接访问,所以只能间接访问函数内部的数据,获得函数内部数据的使用权。 大名鼎鼎的作用域和闭包,面试经常会问到。闭包(closure)是Javascript语言的一个难点,也是它的特色。 声明 理解闭包,先理解函数的执行过程。 代码在执行的过程中会有一个预解析的过程,也就是在代码的...

    WilsonLiu95 评论0 收藏0
  • 你应该要知道的作用域和闭包

    摘要:写在前面对于一个前端开发者,应该没有不知道作用域的。欺骗词法作用域有两个机制可以欺骗词法作用域和。关于你不知道的的第一部分作用域和闭包已经结束了,但是,更新不会就此止住未完待续 这是《你不知道的JavaScript》的第一部分。 本系列持续更新中,Github 地址请查阅这里。 写在前面 对于一个前端开发者,应该没有不知道作用域的。它是一个既简单有复杂的概念,简单到每行代码都有它的影子...

    JouyPub 评论0 收藏0
  • 图解JS闭包形成的原因

    摘要:闭包的出现正好结合了全局变量和局部变量的优点。这就是闭包的一个使用场景保存现场。 前言 什么是闭包,其实闭包是可以重用一个对象,又保护对象不被篡改的一种机制。什么是重用一个对象又保护其不被篡改呢?请看下面的详解。 作用域和作用域链 注意理解作用域和作用域链对理解闭包有非常大的帮助,所以我们先说一下作用域和作用域链 什么是作用域作用域表示的是一个变量的可用范围、其实它是一个保存变量的对象...

    wind3110991 评论0 收藏0
  • 深入javascript——作用域和闭包

    摘要:注意由于闭包会额外的附带函数的作用域内部匿名函数携带外部函数的作用域,因此,闭包会比其它函数多占用些内存空间,过度的使用可能会导致内存占用的增加。 作用域和作用域链是javascript中非常重要的特性,对于他们的理解直接关系到对于整个javascript体系的理解,而闭包又是对作用域的延伸,也是在实际开发中经常使用的一个特性,实际上,不仅仅是javascript,在很多语言中都...

    oogh 评论0 收藏0

发表评论

0条评论

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