We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
闭包是指有权访问另一个函数作用域中的变量的函数。
var k = 10 console.log(k) function makeCounter() { var k = 0; return function() { return ++k; }; } const counter = makeCounter(); console.log(counter()); // 1 console.log(counter()); // 2
makeCounter中的私有变量,被return返回的函数中引用了,counter获取了makerCounter中的返回值。所以虽然counter是在全局作用域,却能访问到makeCounter函数中的私有变量。按照定义,这么一个函数就称为闭包,即counter可以称作闭包函数。
makeCounter
return
counter
makerCounter
之前说到了作用域链是_保证对执行环境有权访问的所有变量和函数的有序访问_。 当执行counter函数内部时,作用域链是怎么样的呢? 通过Chrome调试工具,可以看到执行闭包函数时作用域:
优点:
1.保护函数内的变量安全,加强了封装性 2.在内存中维持一个变量(用的太多就变成了缺点,占内存) 闭包之所以会占用资源是当函数a执行结束后, 变量i不会因为函数a的结束而销毁, 因为b的执行需要依赖 a中的变量。
缺点:
闭包有一个非常严重的问题,那就是内存浪费问题,这个内存浪费不仅仅因为它常驻内存,更重要的 是,对闭包的使用不当会造成无效内存的产生,需要手动的清理机制。
闭包主要应用场景是:模块化与柯里化。涉及到的知识点比较多了,接下来在仔细说说吧。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
概念:
如何创建一个闭包?
makeCounter
中的私有变量,被return
返回的函数中引用了,counter
获取了makerCounter
中的返回值。所以虽然counter
是在全局作用域,却能访问到makeCounter
函数中的私有变量。按照定义,这么一个函数就称为闭包,即counter
可以称作闭包函数。闭包中的作用域链
之前说到了作用域链是_保证对执行环境有权访问的所有变量和函数的有序访问_。
![image](https://user-images.githubusercontent.com/21165482/38227655-d8e6aaa2-3731-11e8-8b74-485e9fa0520c.png)
![image](https://user-images.githubusercontent.com/21165482/38228498-565937da-3736-11e8-98a7-56e0e0a54c5d.png)
当执行counter函数内部时,作用域链是怎么样的呢?
通过Chrome调试工具,可以看到执行闭包函数时作用域:
闭包的优缺点
优点:
缺点:
闭包的应用
闭包主要应用场景是:模块化与柯里化。涉及到的知识点比较多了,接下来在仔细说说吧。
The text was updated successfully, but these errors were encountered: