Node:异步开发小贴士
使用匿名函数保存全局变量
来看看一段代码:
function asyncFunction(callback){
setTimeout(callback,200);
}
let color = 'blue';
asyncFunction(()=>{
console.log(`The color is ${
color}`);
})
color = 'green';
相信大家都知道以上代码的输出肯定是:The color is green.
因为这个例子是异步的,在console.log执行之前,color已经被重新赋值为’green’,因此才会得到与预期不符的结果。
为了解决这一问题,可以利用JavaScript的闭包来保存全局变量
function asyncFunction(callback){
setTimeout(callback,200);
}
let color = 'blue';
(color=>{
asyncFunction(()=>{
console.log('The color is',color );
});
})(color);
color = 'green';
使用闭包后,color就变成了闭包里的本地变量,不会受到闭包外变量改变的影响。