闭包

119 阅读1分钟

闭包是指有权访问另一个函数作用域中的变量的函数

闭包概念

能够读取其他函数内部变量的函数。 或简单理解为定义在一个函数内部的函数,内部函数持有外部函数内变量的引用。

如何从外部读取函数内部的变量,为什么?

    function f1(){
        var n = 123;
        function f2(){    //f2是一个闭包
            alert(n)
        }    
        return f2;
    }

闭包:f2可以读取f1中的变量,只要把f2作为返回值,就可以在f1外读取f1内部变

原因:f1是f2的父函数,f2被赋给了一个全局变量,f2始终存在内存中,f2的存在依赖f1,因此f1也始终存在内存中,不会在调用结束后,被垃圾回收机制回收。

js链式作用域

子对象会一级一级向上寻找所有父对象的变量,反之不行。

js中函数内部可以读取全局变量,函数外部不能读取函数内部的局部变量。

js变量作用域

全局变量、局部变量(函数内):js中函数内部可以读取全局变量,函数外部不能读取函数内部的局部变量。

闭包用途

1.读取函数内部的变量。

2.让这些变量的值始终保持在内存中。不会在f1调用后被自动清除。

3.方便调用上下文的局部变量。利于代码封装。