考虑以下示例:
function doStuff() {
var temp = 0;
function modifyTemp(temp) {
temp = 5;
}
modifyTemp(temp);
//the value of temp is still 0
function modifyTemp2() {
temp = 10;
}
modifyTemp2();
//temp now equals 10
}
doStuff();
请注意,temp 在“doStuff()”的闭包范围内。因此,在此范围内对 temp 的任何引用都将使用此引用,除非有一个优先,如 modifyTemp(temp) 声明的示例。在这种情况下,临时变量的临时副本被创建并存储到“temp”中,该“temp”仅在此函数的范围内进行修改,并且在闭包中定义的 temp 保持不变。所以你的问题的答案是,这取决于你声明你的 resp 变量的范围级别。你的可能看起来写的方式,我建议你担心发生的事情实际上是一个问题。
以下修改(在注释/未注释行中提供)可能会提供完全不同的行为,具体取决于程序的其余部分如何运行,以及您正在进行多少异步操作。请注意,未注释的实现重新定义了变量,因此我们不必担心连续运行或其他函数会干扰它的值。
responder.on('message', function(request) {
//resp = msgpack.unpack(request);
var resp = msgpack.unpack(request);
//resp is my array.
myvar = resp[1];
.
.
.
}