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

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

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

Пытанне:

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

text
1var a = {};
2function clear(a) {
3    a.b = 2;
4    a = null;
5 }
6clear(a);
7console.log(a);

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

text
1{ b: 2 }

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

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

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

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

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

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

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

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

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

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

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