什么是闭包?
答:红宝书(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('张三') // 张三