1、闭包

234 阅读1分钟

(1) 闭包的概念:

闭包是指能够访问另一个函数作用域中的变量的函数。(概念有很多,我觉得这个比较容易理解)

(2) 闭包的形成原因:

内部的函数存在外部作用域的引用就会导致闭包

(3) 闭包的作用:

  • 保护函数的私有变量不受外部的干扰。形成不销毁的栈内存。
  • 把一些函数内的值保存下来。闭包可以实现方法和属性的私有化

(4) 闭包的应用

1. 返回一个函数

    var a = 10
    function demo(){
        var a =20    
        function fn() {
            a++;
            console.log(a)
        }
        return fn
    }

    var b = demo()
    b()    // 21

上面代码中返回的fn()就是一个闭包。

2.把函数作为参数使用

    var a = 'bee'
    function f1() {
        var a = 'pdd'
        function f2() {
            console.log(a)
        }
        return f2
    }

    function f(b) {
        var a = 'app'
        b()
    }
    f(f1())    //pdd

f(f1()) 执行的参数就是函数 f2

3.循环赋值

    for (var i = 1; i < 10; i++) {
        (function (j) {
            setTimeout(function () {
                console.log(j)
            }, 500)
        })(i)
    }

因为闭包的存在,所以上面的程序可以依次输出1~9

(5) 总结

凡事都有利有弊,闭包确实很实用,但过多的使用闭包会占用大量内存,有内存泄漏的风险,所以编写程序过程中要酌情使用哦!