js闭包

2018-09-12  本文已影响0人  igor_d140

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

1. 闭包产生的条件

函数嵌套
内部函数引用了外部函数的数据(可以是变量或者函数),由于变量一直被引用,导致引用的变量未被回收
换句话说:简单地访问函数的词法作用域(静态作用域)以外的自由变量会创建一个闭包。

2. 常见的闭包

将函数作为另一个函数的返回值(函数不必为了被称为闭包而返回,看看闭包产生的条件)
将函数作为实参传递给另一个函数调用

// 图片自动轮播并返回当前索引
function closure() {
  let i = 0
  return function() {
    return console.log(i++)
  }
}
var output = closure()
output() //0
output() // 1
output() //2


闭包有三个特性:

函数嵌套函数。
函数内部可以引用外部的参数和变量。
参数和变量不会被垃圾回收机制回收。

闭包的好处:

可以读取函数内部的变量
希望一个变量长期存储在内存中。
避免全局变量的污染。
私有成员的存在。

闭包的缺点:

常驻内存,增加内存使用量。
使用不当会很容易造成内存泄露。

上一篇 下一篇

猜你喜欢

热点阅读