Что выведет код Junior Объекты и массивы обновлено

Передача по значению и по ссылке

Вопрос

Что выведет код? По строке на каждый вывод.

let n = 1;
function f(x) { x = 3; }
f(n);
console.log(n);

var obj1 = { a: 1 };
function f1(o) { o.a = 5; }
f1(obj1);
console.log(JSON.stringify(obj1));

var obj2 = { a: 1 };
function f2(o) { o = { hello: 1 }; }
f2(obj2);
console.log(JSON.stringify(obj2));

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 1, {"a":5}, {"a":1}. Почему так Каноническая тройка.

Что выведет

1
{"a":5}
{"a":1}

Разбор

Почему так

Каноническая тройка. Примитив копируется - изменение параметра не видно. Мутация свойства по ссылке видна снаружи. Переприсваивание параметра меняет только локальную копию ссылки, исходный объект не трогает. Формулировка «в JS всё передаётся по значению, но значением объекта является ссылка» закрывает все три случая разом.

Вывод

1
{"a":5}
{"a":1}

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.