[JS] ์๋ฐ์คํฌ๋ฆฝํธ ํํ์ ํ๊ฐ ์์์ ๊ฒฐํฉ์ฑ
ํํ์์ ํ๊ฐ ์์
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
๋ฅผ ์ถ๋ ฅํ๋ค. ์ ์ฝ๋์ ์ฐ์ฐ ๊ณผ์ ์ ํ๋ํ๋ ํ์ด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
- ์ผ์ชฝ ํํ์ ํ๊ฐ
์ฐ์ธก ํํ์์ด ํ๊ฐํ ๊ฐ์ด ํ ๋น๋ ๊ณณ์ ๊ฒฐ์ ํ๊ธฐ ์ํดfoo.x
๊ฐ ํ์ฌ ์ฐธ์กฐํ๋ ๊ฐ์ฒด{ n: 1 }
ํ์ธ - ์ค๋ฅธ์ชฝ ํํ์ ํ๊ฐ
- ํ ๋น๋ ๊ณณ์ ๊ฒฐ์ ํ๊ธฐ ์ํด
foo
๋ณ์๊ฐ ํ์ฌ ์ฐธ์กฐํ๋ ๊ฐ์ฒด{ n: 1 }
ํ์ธ - ์๋ก์ด ๊ฐ์ฒด
{ n: 2 }
๊ฐfoo
๋ณ์์ ํ ๋น๋๊ณ ํด๋น ๊ฐ์ฒด ๋ฐํ
- ํ ๋น๋ ๊ณณ์ ๊ฒฐ์ ํ๊ธฐ ์ํด
- ์ฐ์ธก ํํ์์ด ๋ฐํํ
{ n: 2 }
๊ฐ{ n: 1 }
๊ฐ์ฒด์x
์์ฑ์ ํ ๋น bar
๋ณ์๋ ๊ธฐ์กด{ n: 1 }
๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก ์ฝ์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋{ n: 1, x: { n: 2 }}
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
๋ ํผ๋ฐ์ค
- ์ฐ์ฐ์ ์ฐ์ ์์ - JavaScript | MDN
- ๊ธฐ๋ณธ ์ฐ์ฐ์์ ์ํ | JavaScript Info
- JavaScript code trick: What's the value of foo.x| StackOverflow
- Why is the value of foo.x undefined in foo.x = foo = {n: 2}? | StackOverflow
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[React] Blur ํจ๊ณผ๋ฅผ ํ์ฉํ ์ด๋ฏธ์ง ์ง์ฐ ๋ก๋ฉ Image Lazy Loading
[React] Blur ํจ๊ณผ๋ฅผ ํ์ฉํ ์ด๋ฏธ์ง ์ง์ฐ ๋ก๋ฉ Image Lazy Loading
2024.05.04 -
[React] ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํด๋ณด๋ ๋ฌดํ ์คํฌ๋กค Infinite Scroll
[React] ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํด๋ณด๋ ๋ฌดํ ์คํฌ๋กค Infinite Scroll
2024.05.04 -
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ์ ๋๋ ์ดํฐ Generator ์ด ์ ๋ฆฌ
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ์ ๋๋ ์ดํฐ Generator ์ด ์ ๋ฆฌ
2024.05.03 -
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ์ดํฐ๋ฌ๋ธ Iterable ์ด ์ ๋ฆฌ
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ์ดํฐ๋ฌ๋ธ Iterable ์ด ์ ๋ฆฌ
2024.05.03