-1

Case is to copy data to savedData and then clear data.value1 and data.value2 with value 0

But clearing is executing before saving and saved are values 0

var data = {
  value1: 1,
  value2: 2
}

var savedData = [];

function saveData() {
  var saved = savedData.push(data); 
  return saved;
}

function clearData(num){
  if (num > 0) {
    data.value1 = 0;
    data.value2 = 0;
  }

  console.log(savedData);
}

clearData(saveData());
CodeJoe
  • 262
  • 2
  • 10
  • It's not an issue of timing, it's an issue of there being just *one* object which you pass around by reference. – deceze Oct 29 '18 at 08:28

1 Answers1

2

You are just passing the reference of data to savedData.Use Object.assign which will create a deep copy

var data = {
  value1: 1,
  value2: 2
}

var savedData = [];

function saveData() {
  var saved = savedData.push(Object.assign({}, data));
  return saved;
}

function clearData(num) {
  if (num > 0) {
    data.value1 = 0;
    data.value2 = 0;
  }
  console.log(savedData);
  console.log('data ', data)
}

clearData(saveData());
brk
  • 48,835
  • 10
  • 56
  • 78