闭包改变执行结果

如下代码所示的程序,在定时器任务执行完毕得到的 color 值已经是改变后的值

function asyncFunction(callback) {
  setTimeout(callback, 200);
}

let color = "red";

asyncFunction(() => {
  // yellow
  console.log("this color is " + color);
});

color = "yellow";

如何保存color的值,可以使用立即执行函数传入变量,该变量成为函数内部的本地变量因此它保存的值就是外部参数参数的值

function asyncFunction(callback) {
  setTimeout(callback, 200);
}
let color = "red";
((color) => {
  asyncFunction(() => {
    // red
    console.log("this color is " + color);
  });
})(color);
color = "yellow";