闭包

来源:互联网 发布:喜马拉雅 兼职 知乎 编辑:程序博客网 时间:2024/06/04 20:06

闭包就是可以在读取其他函数内变量的函数

在js中,只有读取函数内部的子函数才能读取局部变量,因此可以把闭包理解为 ‘定义在一个函数内部的函数’

本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁


实例代码:

         

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>    <script src="https://code.jquery.com/jquery-3.2.1.js"></script>    <style>    </style></head><body><div id="parent">    <div id="child" class="child"></div></div><script>    $(function(){        function f1(){            var num=1;            add=function(){num+=1};            function f2(){                console.log(num)            }            return f2;        }        var result=f1();        result();        add();        result();    })</script></body></html>

以上代码中,result实际上就是闭包 f2 函数。两次结果为 1   2,证明函数 f1 中的局部变量 num 一直保存在内存中,并没有在 f1 调用后被自动清除

解析:

        f1 是 f2 的父函数,而 f2 被赋值给一个全局变量,导致 f2 一直在内存中,而 f2 依赖于 f1 ,因此 f1 也始终在内存中,不会在调用后被回收

        add=function(){num+=1}; 这段代码中, add前没有使用 var,因此add是一个全局变量,而不是局部变量

        add的值是一个匿名函数,而这个匿名函数本身也是一个闭包,所以add相当于一个setter,可以在函数外部对函数内部的局部变量进行操作


原创粉丝点击