闭包就是一个外部函数,可以直接引用内部函数中的变量.
简单概念
function log(){
let name = 'Chengyu'
function tell(lover){
return `${name} love ${lover}`
}
return tell('JingJing')
}
console.log(log()) // Chengyu love JingJing
//JavaScript允许你使用当前函数外定义的变量
function log(){
let name = 'Chengyu'
function tell(lover){
return `${name} love ${lover}`
}
return tell
}
let action = log()
action('Wei') // Chengyu love Wei
action('HY') // Chengyu love HY
// 即使外部函数已经返回,当前函数仍然可以引用在外部函数所定义的变量
function log(name){
function tell(lover){
return `${name} love ${lover}`
}
return tell
}
let action = log('Chengyu')
action('Wei') // Chengyu love Wei
action('HY') // Chengyu love HY
// 函数可以引用在其作用域内的任何变量,包括参数和外部函数变量
当然上面的那个函数我们就可以简写成这样了
function log(name){
return functin(lover){
return return `${name} love ${lover}`
}
}
实际应用
// 封装axios,用于获取固定接口的common信息包
import axios from 'axios'
// 利用Promise获取同步的异步数据
fDeferData (url) {
return new Promise((resolve, reject) => {
axios.get(url).then(function (response) {
resolve(response.data.resultObject)
}).catch(function (err) {
reject.log(err)
})
})
},
// 获取区域信息
fGetCustSuppNameList () {
return fDeferData('/common/domainList')
}
// 获取产品信息
fGetCustSuppNameList () {
return fDeferData('/common/productList')
}
参考资料:MDN