While working with queue in node.js, I found a different behaviour of the variable passed as a parameter to function and local variable. I assign the value of variable passed as a parameter in a function to local variable after which when I perform any operation on local variable, the value of both variable also gets changed to the new value. While the value of variable passed as parameter to the function should never change until I assign a new value to it.
To dig more deep about this behaviour, I used two local variables and still the same output was found
Here is the example code of the issue:
var change_value = function (payload) {
let value = payload;
console.log('payload:', payload, '\nvalue:', value);
value.color = 'black';
console.log('payload:', payload, '\nvalue:', value);
let new_value = value;
console.log('payload:', payload, '\nvalue:', value, '\nnew_value:', new_value);
delete new_value.color;
console.log('payload:', payload, '\nvalue:', value, '\nnew_value:', new_value);
}
change_value({
name: 'devil'
})
The output of the above code is :
payload: { name: 'devil' }
value: { name: 'devil' }
payload: { name: 'devil', color: 'black' }
value: { name: 'devil', color: 'black' }
payload: { name: 'devil', color: 'black' }
value: { name: 'devil', color: 'black' }
new_value: { name: 'devil', color: 'black' }
payload: { name: 'devil' }
value: { name: 'devil' }
new_value: { name: 'devil' }
While the output I want/am expecting is :
payload: { name: 'devil' }
value: { name: 'devil' }
payload: { name: 'devil'}
value: { name: 'devil', color: 'black' }
payload: { name: 'devil'}
value: { name: 'devil', color: 'black' }
new_value: { name: 'devil', color: 'black' }
payload: { name: 'devil' }
value: { name: 'devil', color: 'black' }
new_value: { name: 'devil' }