Вы можете захватить строковую версию abc
как замыкание вместо ссылки на объект:
function add(_abc) {
return _abc.b = 10;
}
var abc = { a: 5 };
(function(abc) {
let abc_str = JSON.stringify(abc)
setTimeout(function() {
console.log(`abc from inside function ${abc_str}`);
}, 3000);
})(abc);
add(abc);
console.log(`abc from outside function ${JSON.stringify(abc)}`);
Закрытия связывают имена, они не замораживают объекты.Таким образом, нет способа получить снимок состояния объекта в замыкании без создания копии, что мы в основном делаем путем ее строкового преобразования.