Board logo

标题: JavaScript之闭包(2) [打印本页]

作者: look_w    时间: 2019-3-14 19:37     标题: JavaScript之闭包(2)

三、函数式语言

闭包中,一个很重要的特点就是,内部函数作为一个数据被返回。这是由于 JS 是函数式语言,函数可以作为参数传递进函数,也可以作为一个数据返回。函数的嵌套构成了作用域的嵌套,也就有了作用域链。

由于函数具有作用域,且变量的寻找具有 “遮蔽效应”(从内到外,找到第一个就停止),使得局部作用域的变量对于外部作用域是不可见的,于是函数就有了封闭性,所以我们拿函数来包裹封装私有变量,同时也有了闭包。
四、自由变量

    自由变量是指在函数中使用的,但既不是函数参数也不是函数的局部变量的变量。

    function outter() {
        var a = 123;
        
        function inner() {
            console.log(a);
        }
        return inner;
    }
     
    var foo = outter();
    foo();  // 123

对于 inner 函数而言,变量 a, 不是它的函数参数,也不是它的局部变量,a 就是自由变量。
五、闭包的用处和缺点

从闭包的特点可以看出,自由变量保存在了内存中,并能间接访问。

那么闭包的作用就是:

    隐藏私有变量,解决变量命名空间污染的问题。

缺点
如果闭包过多,变量常驻内存,肯定会占用大量内存空间。
总结

由于 JS 是函数式语言,当函数记住并访问所在词法作用域的自由变量时,就产生了闭包,即使函数是在当前词法作用域外执行。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0