Галоўная > Разбор пытанняў з рэальных сумоўяў JS. Практыка

Разбор пытанняў з рэальных сумоўяў JS. Практыка

сумоўе практыка js beginner

Пытанне:

Што ўбачым у кансолі?

var a = {};
function clear(a) {
    a.b = 2;
    a = null;
 }
clear(a);
console.log(a);

Кароткі адказ

{ b: 2 }

Падрабязны адказ

Усе тыпы даных у JS можна падзяліць на спасылкавыя тыпы і прымітыўныя.

Пераменная a адносіцца да спасылкавага тыпу даных. Таму мы маем справу з адным аб'ектам і дзьвума спасылкамі на яго.

Першая спасылка - глабальная пераменная a, другая - спасылка, перададзеная ў функцыю ў якасці аргумента.

var a = {};
function clear(a) {
    a.b = 2;  // у гэтым радку дадаем па спасылцы ўласцівасць `b` аб'екту => { b: 2 }
    a = null;
 }
clear(a);
console.log(a);

Цяпер маем 2 спасылкі на аб'ект { b: 2 }. У наступным радку кода выдаляем спасылку (змяняем значэнне лакальнай пераменнай a).

var a = {};
function clear(a) {
    a.b = 2;
    a = null;  // змянілі значэнне лакальнай пераменнай `а`
 }
clear(a);
console.log(a);

У выніку засталася толькі адна спасылка на аб'ект { b: 2 } з глабальнай пераменнай a.

Таму ў кансолі ўбачым { b: 2 }.

loveJS, 2023-02-03
Каментары

    (Каб даслаць каментар залагуйцеся ў свой уліковы запіс)

    ;