我只是在做实验,这让我很困惑.我不明白为什么两次调用foo
会影响上一次调用的超时回调的输出.此代码:
let state = {
age: 0
};
let getState = () => {
let setState = () => {
state = {
age: state.age + 1
}
}
return {
state,
setState
}
}
function foo() {
let {
state:st,
setState
} = getState();
replicaUseEffect = () => {
console.log("replicaUseEffect", st);
}
console.log("before", st);
setState()
console.log("after", st);
setTimeout(() => replicaUseEffect(), 1000)
};
foo();
产生以下输出,我或多或少都同意:
"before", {
age: 0
}
"after", {
age: 0
}
"replicaUseEffect", {
age: 0
}
现在,只需给foo打两次电话:
foo();
foo();
结果是:
"before", {
age: 0
}
"after", {
age: 0
}
"before", {
age: 1
}
"after", {
age: 1
}
"replicaUseEffect", {
age: 1
}
"replicaUseEffect", {
age: 1
}
为什么在第二个示例中,两次调用foo
会影响both replicaUseEffect
个值,并两次输出1?