js中的闭包

闭包是一种语法特性,指在一个函数中访问了外部的自由变量

{
  let count = 0;
  const add = ()=> {
    count += 1  //访问了该作用域外部的自由变量count
  }
}
{
  let money = 100;
  window.getMoney= function (){ return money;}
  window.use = () => { money -= 1}
  window.earn = () => { money +=1 }
}

通过访问getMoney能间接获取money的值,调用use和earn会更新money的值,我们在作用域以外
无法直接访问money这个变量

闭包的应用:

const add2 = function (){
  let total = 0
  return function add(){
    total+=1  //访问了外部作用域的total
}
  
add2() // 相当于调用了add(),执行了total+=1

解决的问题:

  1. 避免污染全局的环境
  2. 提供对变量的间接访问
  3. 维持变量,避免被垃圾回收

缺点:

使用不当会造成“内存泄漏”

function example(){
  var x = {name:'x'}
  var y = {name:'y',description:'----- 1000多个字符-----'}
  return function fn(){
    return x;
  }
}
const myFn = example()
const myX = myFn() // 对于正常浏览器 y会在一段时间后消失

在example中 x被使用,但 y并没有被使用。在旧版IE中,只要某个函数中的某个变量被使用,那么该函数中的其它未被使用的变量也不会被垃圾回收。

你可能感兴趣的:(js中的闭包)