js 初学闭包的个人粗浅认识

20 篇文章 0 订阅

js 初学闭包的个人粗浅认识

初学js中的闭包,感觉有点类似于C语言中的static局部变量
就试着从这个角度去理解闭包
个人笔记比较杂乱,见谅

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>

    /**
     *
     *
     * 闭包是函数及声明该函数的词法环境的组合
     *
     * 闭包,指的是函数和创建函数是所需要的词法环境的组合,该环境包含这个闭包创建的时候所能访问的所有局部变量
     * 目前接触的有:
     * 函数模式的闭包
     * 对象模式的闭包
     * 
     * 
     * 
     * 
     * 
     * 函数中可以形成闭包
     *
     * 闭包可以缓存数据,这是优点也是缺点
     * 优点就是,提升了变量的作用域链
     * 本来在函数中定义的变量,是局部变量,在函数执行完毕后就会被自动释放
     * 当在函数中形成了闭包,那么这些局部变量的作用域就会被延长,使得外部的函数结束之后,闭包中的函数还是可以使用这些变量
     *
     * 而这也是缺点,无法及时的释放变量
     *
     *
     * 缓存数据,一般可以放在外部函数和内部函数之间,形成闭包
     *
     * 其实感觉,闭包有点像C语言里面的static局部变量
     * 当我想要在函数中,使用一个变量,而这个变量的值在下一次调用这个函数的时候,能够保存上一次的值
     * 那么就用static声明该局部变量,这时,该局部变量就是静态局部变量
     * 这个变量外部无法访问,但是其生命周期却和全局一样
     *
     * 而js中的闭包的作用,也有点这样的感觉
     * 我要在函数中使用上次保留下来的值,那么得用全局变量
     * 全局变量生存周期应该是伴随整个页面,在页面销毁前
     * 全局变量在哪里都可以访问它的值
     *
     * 但是我又感觉全局变量的范围太广,不够隐秘
     * 我想要一个只有我能用的,但是又可以保存上一次的值的变量
     *
     * 那么,我就把这个变量放在我的函数的外面,这样就可以保存值
     * 然后再在这个变量和函数的外面再套一个函数,这样就可以把这个变量局限在外面这个函数内部,实现了隐秘的效果
     * 然后我要使用里面的函数,那么就通过外部的函数返回这个函数即可
     * 这样,就形成了闭包
     *
     *
     *
     *
     */


    function ff() {
        var num = parseInt(Math.random() * 10 + 1);
        return function () {
            return num;
        }
    }

    var fn = ff();
    console.log(fn());


</script>
</body>
</html>

参考资料
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

HOME

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值