๋ฐ˜์‘ํ˜•

ํ‘œํ˜„์‹์˜ ํ‰๊ฐ€ ์ˆœ์„œ


let foo = { n: 1 };
let bar = foo; // foo ๊ฐ์ฒด์˜ ์ฐธ์กฐ ์ฃผ์†Œ๊ฐ€ bar ๋ณ€์ˆ˜์— ํ• ๋‹น๋จ
foo.x = foo = { n: 2 }; // ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ• ๋‹น ์—ฐ์‚ฐ์ž

console.log(foo.x); // ?

 

์œ„ ๋ฌธ์ œ๋ฅผ ์–ผํ•๋ณด๋ฉด foo.x์˜ ๊ฒฐ๊ณผ๋Š” { n: 2 }์ผ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์•„๋‹ˆ๋‹ค. foo.x๋Š” undefined๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์œ„ ์ฝ”๋“œ์˜ ์—ฐ์‚ฐ ๊ณผ์ •์„ ํ•˜๋‚˜ํ•˜๋‚˜ ํ’€์–ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

์—ฐ์‚ฐ ๊ณผ์ •์„ ๋„์‹ํ™”ํ•œ ์ด๋ฏธ์ง€

  1. ์™ผ์ชฝ ํ‘œํ˜„์‹ ํ‰๊ฐ€
    ์šฐ์ธก ํ‘œํ˜„์‹์ด ํ‰๊ฐ€ํ•œ ๊ฐ’์ด ํ• ๋‹น๋  ๊ณณ์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด foo.x๊ฐ€ ํ˜„์žฌ ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด { n: 1 } ํ™•์ธ
  2. ์˜ค๋ฅธ์ชฝ ํ‘œํ˜„์‹ ํ‰๊ฐ€
    • ํ• ๋‹น๋  ๊ณณ์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด foo ๋ณ€์ˆ˜๊ฐ€ ํ˜„์žฌ ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด { n: 1 } ํ™•์ธ
    • ์ƒˆ๋กœ์šด ๊ฐ์ฒด { n: 2 }๊ฐ€ foo ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๊ณ  ํ•ด๋‹น ๊ฐ์ฒด ๋ฐ˜ํ™˜
  3. ์šฐ์ธก ํ‘œํ˜„์‹์ด ๋ฐ˜ํ™˜ํ•œ { n: 2 }๊ฐ€ { n: 1 } ๊ฐ์ฒด์˜ x ์†์„ฑ์— ํ• ๋‹น
  4. bar ๋ณ€์ˆ˜๋Š” ๊ธฐ์กด { n: 1 } ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ์ฝ˜์†” ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” { n: 1, x: { n: 2 }}
  5. foo ๋ณ€์ˆ˜์—” { n: 2 } ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น ๋์œผ๋ฏ€๋กœ foo.x ์ฝ˜์†” ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š”undefined

 

โญ๏ธ foo.x๊ฐ€ ์ฐธ์กฐํ•˜๋Š” foo ๊ฐ์ฒด { n: 1 }๋Š” ์šฐ์ธก ํ‘œํ˜„์‹์˜ foo ๋ณ€์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „์— ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ์— ์ฃผ๋ชฉํ•˜์ž. ํ• ๋‹น ์—ฐ์‚ฐ์ž๋Š” ์šฐ๊ฒฐํ•ฉ์„ฑ(์šฐ์ธก๋ถ€ํ„ฐ ๊ณ„์‚ฐ)์„ ๊ฐ€์ง€๋ฏ€๋กœ 3๋ฒˆ์งธ ์ค„์€ ์•„๋ž˜์™€ ๋™์ผํ•˜๋‹ค.

foo.x = (foo = { n: 2 });

 

ํ•˜์ง€๋งŒ ํ‘œํ˜„์‹์˜ ํ‰๊ฐ€๋Š” ํ•ญ์ƒ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ด๋ค„์ง€๋ฏ€๋กœ ํ• ๋‹น ์—ฐ์‚ฐ์ด ์ด๋ค„์ง€๊ธฐ ์ „, ์™ผ์ชฝ ํ‘œํ˜„์‹๋ถ€ํ„ฐ ํ• ๋‹น๋  ๋ณ€์ˆ˜๋“ค์ด ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ’์„ ํ‰๊ฐ€ํ•˜๊ณ , ์šฐ์ธก๋ถ€ํ„ฐ ์—ฐ์‚ฐํ•œ ๊ฐ’์ด ํ• ๋‹น๋˜๋Š” ๊ฒƒ.

 

(๋ฒˆ์™ธ) ์—ฐ์‚ฐ์ž์˜ ๊ฒฐํ•ฉ์„ฑ


๐Ÿ’ก ๊ฒฐํ•ฉ์„ฑ์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋™์ผํ•  ๋•Œ๋งŒ ๊ณ ๋ ค๋œ๋‹ค. (...) ์†Œ๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•œ “๊ทธ๋ฃน” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’๋‹ค.

 

๊ฑฐ๋“ญ์ œ๊ณฑ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋Š” ์ขŒ(ๅทฆ)๊ฒฐํ•ฉ์„ฑ(์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ณ„์‚ฐ)์„ ๊ฐ€์ง„๋‹ค.
(a ์—ฐ์‚ฐ์ž1 b) ์—ฐ์‚ฐ์ž2 c

1 + 8 + 88;   // ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•˜๋ฏ€๋กœ ์ขŒ๊ฒฐํ•ฉ์„ฑ -> (1 + 8) + 88
4 + 5 + 'px'; // (4 + 5) + "px"

 

๊ฑฐ๋“ญ์ œ๊ณฑ, ํ• ๋‹น ์—ฐ์‚ฐ์ž, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋Š” ์šฐ(ๅณ)๊ฒฐํ•ฉ์„ฑ(์˜ค๋ฅธ์ชฝ → ์™ผ์ชฝ์œผ๋กœ ๊ณ„์‚ฐ)์„ ๊ฐ€์ง„๋‹ค.
a ์—ฐ์‚ฐ์ž1 (b ์—ฐ์‚ฐ์ž2 c)

2 ** 5 ** 10;      // ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•˜๋ฏ€๋กœ ์šฐ๊ฒฐํ•ฉ์„ฑ -> 2 ** (5 ** 10)
let a = b = 8 + 8; // let a = (b = 8 + 8)

 

์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ฒฐํ•ฉ์„ฑ๊ณผ ์ƒ๊ด€์—†์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์—ฐ์‚ฐ์ž๊ฐ€ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.

3 + 10 * 2; // ๊ณฑ์…ˆ์˜ ์šฐ์„ ์ˆœ์œ„(15)๊ฐ€ ๋” ๋†’์œผ๋ฏ€๋กœ -> 3 + (10 * 2)

 

ํ‘œํ˜„์‹์˜ ํ‰๊ฐ€๋Š” ๊ฒฐํ•ฉ์„ฑ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค. โญ๏ธ

const echo = (name, num) => {
  console.log(name + 'ํ•ญ ํ‰๊ฐ€');
  return num;
};

console.log(echo('1', 6) ** (echo('2', 2) ** echo('3', 3)));
// ์ฝ˜์†” ์ถœ๋ ฅ ๊ฒฐ๊ณผ : '1ํ•ญ ํ‰๊ฐ€' -> '2ํ•ญ ํ‰๊ฐ€' -> '3ํ•ญ ํ‰๊ฐ€'
// ํ‘œํ˜„์‹์˜ ํ‰๊ฐ€๋Š” ์™ผ์ชฝ๋ถ€ํ„ฐ ์ง„ํ–‰๋˜๋ฏ€๋กœ echo('1', 6)๋ถ€ํ„ฐ ํ‰๊ฐ€ํ•œ ๊ฒƒ
// ์—ฐ์‚ฐ์€ ์šฐ๊ฒฐํ•ฉ์„ฑ์ด๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ๊ณ„์‚ฐ -> 6 ** (2 ** 3)

 

(๋ฒˆ์™ธ) ์ดํ•ญ ์—ฐ์‚ฐ์ž


๐Ÿ’ก +, -, = ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—ฐ์‚ฐ์ž๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. x = value๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด value๊ฐ€ x์— ํ• ๋‹น๋˜๊ณ  value๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์—ฐ์‚ฐ์ž ์ฒด์ด๋‹ ๋“ฑ์€ ์ด๋Ÿฐ ํŠน์ง•์„ ํ™œ์šฉํ•œ ํ‘œํ˜„์‹์ด๋‹ค.

// ์ฝ”๋“œ ์ฐธ๊ณ  JavaScript Info

// ๋‹จํ•ญ ์—ฐ์‚ฐ์ž(ํ•˜๋‚˜์˜ ํ”ผ์—ฐ์‚ฐ์ž๋งŒ ๋ฐ›์Œ)
let a = 1;

// ์ดํ•ญ ์—ฐ์‚ฐ์ž (๋‘๊ฐœ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ›์Œ)
let a = 1, y = 2; // let a = 1; let y = 2;

// ํ• ๋‹น ์—ฐ์‚ฐ์ž ์ฒด์ด๋‹
let a = b = c = 1; // let a = 1; let b = 1; let c = 3;

// ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ• ๋‹น ์—ฐ์‚ฐ์ž
let a = 1;
let b = 2;
let c = 3 - (a = b + 1);
// โ‘ด (์šฐ์ธก ํ‘œํ˜„์‹) b + 1์„ ํ‰๊ฐ€ํ•œ ๊ฐ’ 3์„ a ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ณ  3 ๋ฐ˜ํ™˜
// โ‘ต ์šฐ์ธก ํ‘œํ˜„์‹์—์„œ ๋ฐ˜ํ™˜ํ•œ ๊ฐ’ 3์„ c ๋ณ€์ˆ˜์— ํ• ๋‹น
console.log(a); // 3
console.log(c); // 0

 

๋ ˆํผ๋Ÿฐ์Šค


 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•