Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 末尾变量中的意外值_Javascript - Fatal编程技术网

Javascript 末尾变量中的意外值

Javascript 末尾变量中的意外值,javascript,Javascript,我在node.js上试了试,发现代码中有一个奇怪的行为。假设这是由于我缺乏异步编码的经验,我尝试用纯(同步)javascript进行复制,但结果相同。 下面是我的代码: function AddCurrWeek(agenda) { try { agenda["Tue"].push("Some event"); return agenda; } catch (error) { console.log(error); } };

我在node.js上试了试,发现代码中有一个奇怪的行为。假设这是由于我缺乏异步编码的经验,我尝试用纯(同步)javascript进行复制,但结果相同。 下面是我的代码:

function AddCurrWeek(agenda) {
    try {
        agenda["Tue"].push("Some event");
        return agenda;
    } catch (error) {
        console.log(error);
    }
};

function Initialize() {
    var new_week = { "Sun": [], "Mon": [], "Tue": [], "Wed": [], "Thu": [], "Fri": [], "Sat": [] };
    try {
        return new_week;
    } catch (error) {
        console.log(error);
    }
}

function Main() {
    try {
        var aPrec, aCurr
        var aInit = Initialize();
        aPrec = aInit;
// after this line < aPrec > is used no more.

        // adding some data to < aInit > saving into a new variable:
        aCurr = AddCurrWeek(aInit);

        if (aCurr != aPrec ) {
          console.log("Save changes...");
          // but it is never different!!!!
        }
        console.log("> aCurr:", aCurr);
        console.log("> aPrec:", aPrec);
// At the end, < aCurr > and < aPrec > share the same value!!!!
    } catch (error) {
        console.log(error);
    }
};

Main()

每周功能(议程){
试一试{
议程[“星期二”]。推送(“某些事件”);
返回议程;
}捕获(错误){
console.log(错误);
}
};
函数初始化(){
var new_week={“Sun”:[],“Mon”:[],“Tue”:[],“Wed”:[],“Thu”:[],“Fri”:[],“Sat”:[];
试一试{
返回新的一周;
}捕获(错误){
console.log(错误);
}
}
函数Main(){
试一试{
var aPrec,aCurr
var aInit=Initialize();
aPrec=aInit;
//在此之后,不再使用。
//将一些数据添加到保存到新变量中的:
aCurr=ADDCURR周(aInit);
如果(aCurr!=aPrec){
log(“保存更改…”);
//但它从来都不例外!!!!
}
console.log(“>aCurr:”,aCurr);
控制台日志(“>aPrec:”,aPrec);
//最后,共享相同的值!!!!
}捕获(错误){
console.log(错误);
}
};
Main()
请问,有人能告诉我为什么最后
aCurr
aPrec
共享相同的值,以及如何避免这种情况? 提前谢谢。
Denis

变量名只是指向实际数据结构的指针,使用
var aInit=Initialize()只创建一次

aPrec=aInit
没有复制数据结构的内容,它只是说
aPrec
应该指向与
aInit
相同的数据结构


注意
console.log(“>aCurr:”,aCurr)的输出是如何进行的;控制台日志(“>aPrec:”,aPrec)两者都包含“星期二:['某些事件']”?这是你的线索,
agenda[“Tue”].push(“某个事件”)
在单个数据结构上运行,因为更改应用于
aCurr
以及
aPrec

您应该尝试为问题找到一个更好的标题,当前的标题不是很明确;)我不明白为什么你会期望
aCurr
aPrec
有所不同。我的意思是,代码字面上可以归结为
let a={},b=a;a==b,只是你在它周围放了一大堆冗长的代码。由于AddCurrWeek修改并返回其输入实例,两个变量都指向同一个对象,这是预期的行为。感谢Matt让我考虑“传递/指向”(抱歉,我的bat标题:不清楚,因为我的头脑不清楚)。因此,我不得不“克隆”我的var,而不是“复制”它。现在这么简单。。。但不是没有你的建议。更新如下:''函数AddCurrWeek(agenda){…var newAgenda=JSON.parse(JSON.stringify(agenda))返回newAgenda;}