Skip to content
New issue

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

闭包基础 #6

Open
Abiel1024 opened this issue Apr 3, 2018 · 0 comments
Open

闭包基础 #6

Abiel1024 opened this issue Apr 3, 2018 · 0 comments

Comments

@Abiel1024
Copy link
Owner

Abiel1024 commented Apr 3, 2018

概念:

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

如何创建一个闭包?

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可以称作闭包函数。

闭包中的作用域链

之前说到了作用域链是_保证对执行环境有权访问的所有变量和函数的有序访问_。
当执行counter函数内部时,作用域链是怎么样的呢?
image
通过Chrome调试工具,可以看到执行闭包函数时作用域:
image

闭包的优缺点

优点:

1.保护函数内的变量安全,加强了封装性 
2.在内存中维持一个变量(用的太多就变成了缺点,占内存) 
闭包之所以会占用资源是当函数a执行结束后, 变量i不会因为函数a的结束而销毁, 因为b的执行需要依赖 
a中的变量。

缺点:

闭包有一个非常严重的问题,那就是内存浪费问题,这个内存浪费不仅仅因为它常驻内存,更重要的 
是,对闭包的使用不当会造成无效内存的产生,需要手动的清理机制。

闭包的应用

闭包主要应用场景是:模块化与柯里化。涉及到的知识点比较多了,接下来在仔细说说吧。

@Abiel1024 Abiel1024 changed the title 闭包详解 闭包基础 Apr 3, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant