什么是闭包?

221 阅读1分钟

什么是闭包?

答:红宝书(P178)上对于闭包的定义:闭包是指有权访问另外一个函数作用域中的变量的函数。

关键在于下面两点:

1.是一个函数。

2.能访问另外一个函数作用域中的变量。

对于闭包下面有三个特性。

1.闭包可以访问当前函数外的变量。

funciton getUserInfo(){
    var name = '咚咚'
  function say(age){
    console.log(`${name}今年${age}岁`)
  }
  return say(18)
}
getUserInfo() // 咚咚今年18岁

2.即使外部函数已经返回,闭包仍然访问外部函数定的变量。

function getUserInfo() {
    var name = '咚咚'
    function say(age) {
      console.log(`${name}今年${age}岁`); // 外部访问的name
    }
    return say
 }
const info = getUserInfo()
info(16) // 咚咚今年16岁
info(19) // 咚咚今年19岁

3.闭包是可以更新外部变量的值。

function getUserInfo() {
    var name = ''
    function setName(newName) {
      name = newName
      console.log(name);
    }
    return setName
 }
  const setName = getUserInfo()
  setName('小明') // 小明
  setName('张三') // 张三