什么是闭包

什么是闭包?

简单来说,闭包是指外部可以访问另一个函数作用域内的变量的函数,一般是定义在外层函数中的内层函数。

为什么需要闭包?

局部变量无法共享和长久的保存,而全局变量可能造成变量污染,所以我们希望有一种机制既可以长久的保存变量又不会造成全局污染。

特点

  • 占用更多内存
  • 不容易被释放

何时使用?

变量既想反复使用,又想避免全局污染

var a = 1

function f(b) {
  return function g(c) {
    return function h(d) {
      return a + b + c + d
    }
  }
}

var add2 = f(2)// b=2

var add4 = add2(2)//c=2
var add5 = add2(3)//c=3

var r1 = add4(10)
var r2 = add5(10)


console.log(r1,r2)

答案是15,16


在没有class机制,只有函数的语言里,借助闭包,同样可以封装一个私有变量。我们用JavaScript创建一个计数器:

function create_counter(initial) {

var x = initial || 0;

return {

inc: function () {

x += 1;

return x;}}}

var c1 = create_counter();
c1.inc(); // 1
c1.inc(); // 2
c1.inc(); // 3

var c2 = create_counter(10);
c2.inc(); // 11
c2.inc(); // 12
c2.inc(); // 13


廖雪峰的闭包

https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143449934543461c9d5dfeeb848f5b72bd012e1113d15000


猜你喜欢

转载自blog.csdn.net/xxm0720/article/details/79787241