考虑一种情况,我有一个参数的异步函数。一个数组。
我在函数中使用了这个参数。我担心多次调用函数可能会重写我之前发送给函数的数组。它会发生吗?
假设此代码: //这是一个IPC函数,将由另一个进程调用。
responder.on('message', function(request) {
resp = msgpack.unpack(request);
//resp is my array.
myvar = resp[1];
.
.
.
}
我担心resp []会在第一次调用完成之前被覆盖,这会导致第一次调用代码执行时出现问题。
答案 0 :(得分:1)
考虑以下示例:
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”,该临时值仅在此函数的范围内修改,并且闭包内定义的临时保持不变。所以你的问题的答案是,它取决于你声明你的resp变量的范围。你可以写的方式,我会建议你所关注的事情实际上是一个问题。
以下修改(在注释/未注释的行中提供)可能会提供极端不同的行为,具体取决于程序其余部分的功能以及您正在进行的异步内容。请注意,未注释的实现重新定义了变量,因此我们不必担心连续运行或其他函数干扰它的值。
responder.on('message', function(request) {
//resp = msgpack.unpack(request);
var resp = msgpack.unpack(request);
//resp is my array.
myvar = resp[1];
.
.
.
}