moment()。添加以前设置的变量变量

时间:2018-03-25 23:52:19

标签: javascript momentjs

我有一个函数,当我将日期传递给函数时,它应返回两个变量thisYearnextYear。但是,当我在.add上致电date时,即使thisYear已经设置,它也会更改thisYear的值。

功能和通话

http://jsfiddle.net/rLjQx/29945/

var someDate = moment()
thisYearAndNextYear(someDate)

function thisYearAndNextYear(date) {
  const thisYear = date
  console.log("thisYear = " + thisYear);
  const nextYear = date.add(1, 'year')
  console.log("nextYear = " + nextYear);
  console.log("thisYear (after nextYear set) = " + thisYear);
}

输出

thisYear = 1522021438255
nextYear = 1553557438255
thisYear (after nextYear set) = 1553557438255  // ISSUE: this should still be 1522021438255

是否有人了解如何防止这种奇怪的行为导致thisYear保留其初始值?

1 个答案:

答案 0 :(得分:2)

通过引用传递对象。当您将引用对象的变量传递给函数时,该函数仍会获得对原始对象的引用。您可以这样想:非基元(如对象)的变量引用内存地址,并传递这些内存地址。

因此,当您在时刻对象上调用{{1}}时,对象会发生变异。

如果要克隆时刻对象,以便可以对其进行操作:

https://momentjs.com/docs/#/parsing/moment-clone/

调用{{1}}方法。

{{1}}