๋ชฉ์ฐจ
JS์์ ๋ณ์๋ฅผ ๋ง๋ค ๋ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
์ด๋ค์ ์ ์ธ, ํ ๋น, ๋ฒ์์ ์ธก๋ฉด์์ ์๋ก ๋ค๋ฅธ ํน์ง์ ๊ฐ์ง๋ค!
var
let
const
์ ์ธ | ํ ๋น | ๋ฒ์ | |
var | ์ฌ์ ์ธ O | ์ฌํ ๋น O | ํจ์ scope |
let | ์ฌ์ ์ธ X | ์ฌํ ๋น O | ๋ธ๋ก scope |
const | ์ฌ์ ์ธ X | ์ฌํ ๋น X (๊ฐ์ฒด ๋ด๋ถ๋ ์๊ด์์ ) |
๋ธ๋ก scope |
- ๋ง์ฝ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด?
๊ฐ์ฒด๋ ์ด๋ ํ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ธํ์ฌ๋ ๋ด๋ถ ์์์ ๋ํ ์์ ์ ๊ฐ๋ฅํ๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ ์๋์ ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ค.
Object.freeze( ์์ ๋ถ๊ฐํ๊ฒ ํ๊ณ ์ถ์ ๊ฐ์ฒด๋ช
);
์์
const a = { name : "Kassid"};
Object.freeze(a);
a.name = "Hello";
console.log(a);
๋ณ์์ ํธ์ด์คํ
(์์ธํ ๋ค๋ค๋ ๊ธโผ)
2023.03.31 - [๐ | WEB DEV/Vanilla JS] - JS_๊ธฐ์ (3)_ Hoisting(ํธ์ด์คํ ) ๋ฟ์๊ธฐ
JS์์ง์ ๋ณ์๋ฅผ ๋ณด๋ฉด ํธ์ด์คํ ์ ํ๋ค.
์ฆ, ๋ณ์ ์ ์ธ๋ถ๋ฅผ ํด๋น ๋ฒ์์ ์๋จ์ผ๋ก ๋๊ณ ์จ๋ค.
๋ณ์ ํ ๋ฒ์ ์ฌ๋ฌ๊ฐ
let name = "Kassid", age = 25, job = "student";
๋ณ์๋ฅผ ํ ๋ฒ์ ์ฌ๋ฌ๊ฐ ์ ์ธ ๋ฐ ์ด๊ธฐํ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์์ ๊ฐ์ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
window๋ก ์ ์ญ๋ณ์ ๋ง๋ค๊ธฐ
var ํค์๋๋ ์ ์ญ๋ณ์๋ฅผ ๋ง๋ค๋ฉด window์ ๋ณด๊ด์ด ๋๋ค.
var val = "Hello";
console.log(window.val);
--------
Hello
์ด๋ฌํ ์ ์ญ๋ณ์๋ฅผ var ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
window.val2 = "HALO";
console.log(window.val2);
(Node.js ์์๋ global ํค์๋๋ก ๋์ฒด ๊ฐ๋ฅ!)
๋ฐ๋ณต๋ฌธ์์์ ๋ฒ๊ทธ (w. var / let)
for (var i = 1; i < 6; i++) {
setTimeout(function() { console.log(i); }, i*1000 );
}
์์ ๋ฐ๋ณต๋ฌธ์ var๋ก ์ ์๋ i๋ฅผ ์ด์ฉํ์ฌ 1์ด ๊ฐ๊ฒฉ์ผ๋ก 1~5๊ฐ ์ถ๋ ฅ๋๋๋ก ์์ฑํ ์ฝ๋์ด๋ค.
ํ์ง๋ง ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
5
5
5
5
5
์ด๋ ๊ฒ ๊ธฐ๋ํ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ 5๋ง ์ถ๋ ฅ์ด ๋๋ค. ๊ทธ ์ด์ ๋ ๋ฌด์์ผ๊น?
๋ฐ๋ณต๋ฌธ์ ์ดํด๋ณด๋ฉด setTimeout์ด 5ํ ํธ์ถ๋๋ค.
์ด๋ ๋ฐ๋ณต๋ฌธ์ด ์ข ๋ฃ๋ ๋๊น์ง setTimeout ๋ด๋ถ๋ ๋์์ ์คํ์ด ๋์ง ์๊ณ ,
setTimeout์ ์ค์ ๋ ์ด์ ๋ง์ถ์ด ์คํ์ด ๋๋ค.
๋ด๋ถ ์ฝ๋๊ฐ ์คํ์ด ๋ ๋ i๋ฅผ ์ฐธ์กฐํ๋๋ฐ
var ํค์๋๋ก ์ ์ธ์ด ๋์ด์๊ณ ์ด ํค์๋์ ์ ์ฉ scope๋ ํจ์ ๋ฒ์์ด๋ค.
์ฆ, setTimeout ๋ด๋ถ ์ฝ๋๊ฐ ์คํ์ด ๋ ๋
์ฐธ์กฐํ๋ i์ ๊ฐ์ ๊ฐ ๋ธ๋ก๋ง๋ค ๋ค๋ฅธ ๊ฒ์ด ์๋ ๋ชจ๋ ๋ธ๋ก์ด ๊ฐ์ i๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์
๋ชจ๋ 5๋ผ๋ ๊ฐ์ ๋ฐํํ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผํ ๊น?
for (let i = 1; i < 6; i++) {
setTimeout(function() { console.log(i); }, i*1000 );
}
--------
1
2
3
4
5
๊ฐ๋จํ let ํค์๋๋ก ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค.
let์ ๋ธ๋ก ๋จ์์ด๊ธฐ๋๋ฌธ์ ๊ฐ ๋ธ๋ก๋ง๋ค. let i =1, let i =2, ... ๋ผ๊ณ ์ ์ธํ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
'๐ | WEB DEV > Vanilla JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (30)_ Spread Operator (0) | 2023.08.06 |
---|---|
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (29)_ Tagged Literals (0) | 2023.08.05 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (28)_ Arrow function (0) | 2023.08.02 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (27)_ this ํค์๋ (0) | 2023.08.01 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (26)_ ์ ๊ทผ์ ํ๋กํผํฐ์ privateํ๋ (0) | 2023.04.10 |
๋๊ธ