Как закрытия javascript работают с объектами - PullRequest
0 голосов
/ 17 октября 2018
function add(_abc) {
    return _abc.b = 10;
}

var abc = { a: 5 };

(function(abc){
    setTimeout(function(){
        console.log(`abc from inside function ${JSON.stringify(abc)}`);
    }, 3000);
})(abc);

add(abc);

console.log(`abc from outside function ${JSON.stringify(abc)}`);

Производит вывод

abc from outside function {"a":5,"b":10} 
abc from inside function {"a":5,"b":10} 

Я хочу отобразить вывод консоли из внутренней функции без b

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете захватить строковую версию 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)}`);

Закрытия связывают имена, они не замораживают объекты.Таким образом, нет способа получить снимок состояния объекта в замыкании без создания копии, что мы в основном делаем путем ее строкового преобразования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...