关于闭包

闭包

闭包的定义:
外部函数里面包含内部函数;

闭包的优缺点:
//优点:保证变量不被全局污染 ,外部可以访问函数内部的变量
// 缺点,执行完毕后变量不会释放。容易造成内存泄漏

那么闭包到底是什么样子的呢,我们就来看一下;

    
        function fun() {
            var a = 'aaa' 
            var d = 'eeee'
            return function () {
                var c = 'ccc'
                console.log(a)
                console.log(d)
            }
        }
        var d = 'dddd'
        // fun()
        var res = fun()
        res()

        // res 存的值。与res1形式一样
        // 所以 fun 与 res 是两个相互独立的作用域。

        // var res1 = function () {
        //     var c = 'ccc' 
        //     console.log(c)
        //     console.log(a)
        // }




        // (function(){
        //     var a = 'aaa'
        //     console.log(cc)
        //     return function(){
        //         var cc = 'cc'
        //         console.log(a)
        //     }
        // }())
 // 闭包内变量不会被全局变量污染
        function fun() {
            a = 0 // 全局变量
            var b = '' // 闭包内变量
            var fn = function () {
                console.log(a)
                console.log(b)
            }
            return fn
        }
        var res = fun()
        var b ='用来污染闭包中变量;没污染成'
        var a = 222 // 全局变量  
        res()
        // 因为正常情况下,res() 访问的变量为全局,全局变量是可以被全局变量修改的
        // 又因为 闭包中没修稿
        // 所以 闭包优点不能被全局变量污染
        // 原理因为:作用域 , 函数赋值特点有关
        // 函数赋值特点;将一个定义的函数赋值给另一变量xx, xx() 实际上执行的就是定义的函数


        // 函数赋值  浅拷贝 牵一发动全身
        function a(){
            console.log('aaa')
            var d = 'sss'
        }
        // 只要a 变了 bcd 全变
        var b = a
        var c = b
        var d = c
        b()
        a()

        var  c = 'qq'
        // var c  = 1123;
        var b = c 
        b= 23

在上面我们不难可以看到闭包的特点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值