从一脸懵逼到掌握闭包 🍉

206 阅读2分钟

关于闭包必问的两个问题:

  1. 神魔是_闭包_?

  2. _闭包_的作用是神魔?

神魔是闭包?

_____________________________________________________________________________________________

var local = '变量'
function foo(){
 console.log(local)
}

假设上面三行代码在一个立即执行函数中。 三行代码中,有一个局部变量local,有一个函数foofoo里面可以访问到local变量。那么这就是一个闭包。 函数 和 函数内部能访问到的变量 (也叫环境) 的总和,就是一个闭包

大部分的闭包都是以函数套函数的形式来进行展示的。

比如这个样子:

function foo(){
  var local = 1
  function bar(){
    local ++
    return local
  }
  return bar
}
var func = foo()
func()

local变量和bar 函数就组成了一个闭包。

函数套函数的作用是啥呢?

_____________________________________________________________________________________________

函数套函数就是为了故意制造出一个局部的变量 local ,如果不把 local放在一个函数里面,local 就成了一个全局的变量,就没有办法做到 闭包的作用(隐藏一个变量)

return bar的作用是啥?

_____________________________________________________________________________________________

return bar 就是为了让你能够使用这个闭包。为了让外面能够访问到这个bar函数而已。

闭包的作用是神魔?

____________________________________________________________________________________________

其实从上面的例子我们已经能够看出来,闭包就是制造一个局部变量,只给外部提供一个可以操作这个变量的方法

比如我们需要发优惠券给用户,我们发的优惠券都是`xx-10`这种类型的,有人如果不小心改错了数据,将这个`xx`改成了负数,用户总不能用了优惠券越用越亏吧。 所以我们不允许别人操作这个数据,只提供给他一个方法。

function(){
  var xx =20
  window.加1块钱 = function(){
   xx += 1
  }
  window.减1块钱 = function(){
  xx -= 1
  }
}

那么我们的这个方法就可以调用 window.加1块钱 或者减1块钱 微调优惠券的优惠力度,而不至于直接改数据。

这下又形成了两个闭包:

  1. xx 和 加1块钱的函数
  2. xx和减一块钱的函数

闭包和作用域

_____________________________________________________________________________________________

var local = '变量'
function foo(){
 console.log(local)
} //在一个立即执行函数中

foo的函数内部可以使用foo函数外部的变量,就符合了闭包的定义。

闭包是 JavaScript 一个非常重要的特性,这意味着当前作用域总是能够访问外部作用域中的变量。因为 函数 是 JavaScript 中唯一拥有自身作用域的结构,因此闭包的创建依赖于函数。

作者:哔哔不吃鱼
链接:juejin.cn/post/684490…
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

作者:哔哔不吃鱼
链接:juejin.cn/post/684490…
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。