nodejs中的闭包使用特别常见,经常从事java或python开发的人员,可能要特别注意了,因为nodejs采用异步io,所以变量的状态很重要,一不小心就取错值了,为了保留变量的状态,因此出现了闭包(其他语言也有这个概念,如java),来例子,没有闭包的例子:
function async(callback){
setTimeout(() => {
callback();
}, 200);
}
let myVar='first Value';
async(()=>{
console.log(`myVar is ${myVar}`);//myVar is last Value
})
myVar = "last Value";
采用闭包的例子:
function async(callback){
setTimeout(() => {
callback();
}, 200);
}
let myVar='first Value';
((myVar)=>{
async(()=>{
console.log(`myVar is ${myVar}`);//myVar is first Value
})
})(myVar);
myVar = "last Value";
本质上,闭包就是,将myVar全局作用域,通过匿名函数变成局部变量,这样myVar的值就保留了下来。