728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
๐ ๋ฌธ์ 1.
func1(); // ์๋ฌ
function func1() {
console.log(hello);
let hello = 'Hello!';
}
- hello ๋ผ๋ ๋ณ์๊ฐ var ํค์๋๋ก ์ ์ธ์ด ๋์๋ค๋ฉด hoisting ํ์ undefined ๋ฅผ ํ ๋น(์ด๋ฅผ initialization ์ด๋ผ๊ณ ํจ)ํ๋ฏ๋ก ์ฝ์์ฐฝ์ undefined ๋ฅผ ์ถ๋ ฅํ๋ค.
- ํ์ง๋ง hello ๋ผ๋ ๋ณ์๊ฐ let ํค์๋๋ก ์ ์ธ๋๋ ๊ฒฝ์ฐ์๋ hoisting ์ ๋์ง๋ง undefined ๊ฐ ํ ๋น๋์ง๋ ์๊ธฐ ๋๋ฌธ์ ์ฝ์์ฐฝ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๐ ๋ฌธ์ 2.
func2(); // ์๋ฌ
var func2 = function() {
console.log(hello);
var hello = 'Hello!';
}
- func2() ์ ์ธ๋ถ๋ถ์ ๋ณด๋ฉด function ํค์๋ ๋์ ๋ณ์๋ฅผ ๋ง๋๋ ๊ฒ์ฒ๋ผ ํจ์๋ฅผ ์ ์ธํ๊ณ ํ ๋นํ๊ณ ์๋ค.
- ์ด๋ ๊ฒ ํจ์๋ฅผ ๋ง๋ค์ด๋ hoisting ์ด ๋ฐ์ํ๋๋ฐ, hoisting ์ ๋ณ์์ ์ ์ธ๋ถ๋ถ๋ง ์ด๋ฃจ์ด์ง๋ฏ๋ก, var func2; ๋ง hoisting ๋๋ค.
- ์ด ๋ณ์์๋ค๊ฐ ์๊ดํธ๋ฅผ ๋ถ์ฌ๋ดค์ ์์ง์ ํจ์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์คํ์ด ๋ถ๊ฐํ๋ฏ๋ก ํจ์๊ฐ ์๋๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
๐ ๋ฌธ์ 3.
let c = 1;
var func3 = function() {
c = 2;
}
console.log(c); // 1
- c ๋ 1 ์ด๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ๋ค์์ ํจ์๋ฅผ ๋ง๋ค์ด c = 2 ๋ผ๊ณ ๊ฐ์ ๋ณ๊ฒฝํ๋ค.
- ํ์ง๋ง ํจ์๋ฅผ ์ ์๋งํ๊ณ ์คํ์ ์ํค์ง ์์๊ธฐ ๋๋ฌธ์, func3() ํจ์๋ ์๋ ์ฝ๋๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ฏ๋ก c ๋ ๊ทธ๋ฅ 1 ์ด๋ค.
๐ ๋ฌธ์ 4.
let d = 1;
var e = 2;
window.d = 3;
window.e = 4;
console.log(d + e); // 1 + 4 = 5
- d ๋ let ๋ณ์๋ก 1 ์ ํ ๋นํ๊ณ , ์ ์ญ๋ณ์๋ก 3์ ํ ๋นํ๋ค.
- ์ด ๊ฒฝ์ฐ, d ๋ฅผ ์ฌ์ฉํ์ ๋ ์กฐ๊ธ ๋ ๋ฒ์๊ฐ ์๊ณ ๊ฐ๊น์ด 1 ์ ์ฐธ์กฐํด์ ์ฌ์ฉํ๋ค.
- e ๋ var e = 2 ์ window.e = 4 ๊ฐ ๊ฑฐ์ ๋์ผํ๋ฏ๋ก 4๋ก ์ฌํ ๋น ๋์๋ค.
- ๋ฐ๋ผ์ 1 + 4 ๊ฐ ๋์ด 5 ๊ฐ ์ฝ์์ฐฝ์ ์ถ๋ ฅ๋๋ค.
๐ ๋ฌธ์ 5.
for (var i = 0; i < 5; i++) {
setTimeout(function() { console.log(i); }, i*1000 );
}
for (let i = 1; i < 6; i++) {
setTimeout(function() { console.log(i); }, i*1000 );
}
- JavaScript ์ ์ ์ฅ์์ ๋ฌธ์ ์ ์ฝ๋๋ฅผ ํด์ํด๋ณด์.
- JavaScript ๋ ๋ฐ๋ณต๋ฌธ์ ๋ง๋๋ฉด ๋ฐ๋ณต๋ฌธ ๋ด์ ์ฝ๋๋ฅผ ๋ฐ๋ณตํด์ ์คํํ๋ค.
- ๋ฐ๋ผ์, i ๊ฐ 0 ์ผ ๋๋ถํฐ, 5 ๊ฐ ๋๊ธฐ ์ ๊น์ง ๋ฐ๋ณตํด๋ฌ๋ผ๊ณ ๋ฐ๋ณต๋ฌธ์ ์์ฑํด๋์์ผ๋ ์ด 5 ๋ฒ ๋ฐ๋ณต์ด ๋์ด์ผ ํ๋ค.
- ํ์ง๋ง ๋ด๋ถ ์ฝ๋๊ฐ n ์ด ํ์ console.log(i) ๋ฅผ ์คํํด๋ฌ๋ผ๋ setTimeout() ํจ์์ด๋ฏ๋ก ๋ฐ๋ณต๋ฌธ๊ณผ ๋์์ ์คํ๋๋ ๊ฒ ์๋๋ผ ๋์ค์ ์คํ๋๋ค.
- ๊ทธ ๊ฒฐ๊ณผ, ๋ฐ๋ณต๋ฌธ์ ํด์ํ ํ 1์ด๊ฐ ์ง๋๋ฉด setTimeout() ์์ console.log(i) ๊ฐ ์คํ๋์ด์ผ ํ๋๋ฐ ์ด๋ฏธ ๋ฐ๋ณต๋ฌธ์ ์คํ์ด ๋๋ ์ ์ญ๋ณ์ i ๊ฐ 5 ๊ฐ ๋์ด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์ ์ฝ์์ฐฝ์๋ 5 ๋ง 5๋ฒ ์ถ๋ ฅ์ด ๋๋ค.
- ๋ฐ๋ผ์ var ํค์๋ ๋์ ์ let ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒ์๊ฐ ์ค๊ดํธ ์์ด๋ฏ๋ก, 1์ด ํ์ console.log(i) ๋ฅผ ์คํํ๊ธฐ ์ํด i ๋ฅผ ์ฐพ์์ ๋ for ๋ฐ๋ณต๋ฌธ ์์ i ๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๊ฒ ๋๋ค.
๐ ๋ฌธ์ 6.
<div style="display : none">๋ชจ๋ฌ์ฐฝ0</div>
<div style="display : none">๋ชจ๋ฌ์ฐฝ1</div>
<div style="display : none">๋ชจ๋ฌ์ฐฝ2</div>
<button>๋ฒํผ0</button>
<button>๋ฒํผ1</button>
<button>๋ฒํผ2</button>
var btns = document.querySelectorAll('button');
var modals = document.querySelectorAll('div');
for (var i = 0; i < 3; i++){
btns[i].addEventListener('click', function(){
modals[i].style.display = 'block';
});
}
var btns = document.querySelectorAll('button');
var modals = document.querySelectorAll('div');
for (let i = 0; i < 3; i++){
btns[i].addEventListener('click', function(){
modals[i].style.display = 'block';
});
}
- JavaScript ์ ์ ์ฅ์์ ๋ฌธ์ ์ ์ฝ๋๋ฅผ ํด์ํด๋ณด์.
- JavaScript ๋ ๋ฐ๋ณต๋ฌธ์ ๋ง๋๋ฉด ๋ฐ๋ณต๋ฌธ ๋ด์ ์ฝ๋๋ฅผ ๋ฐ๋ณตํด์ ์คํํ๋ค.
- ๋ฐ๋ผ์, i ๊ฐ 0 ์ผ ๋๋ถํฐ, 3 ์ด ๋๊ธฐ ์ ๊น์ง ๋ฐ๋ณตํด๋ฌ๋ผ๊ณ ๋ฐ๋ณต๋ฌธ์ ์์ฑํด๋์์ผ๋ ์ด 3 ๋ฒ ๋ฐ๋ณต์ด ๋์ด์ผ ํ๋ค.
- ํ์ฌ ๋ด๋ถ ์ฝ๋๋ addEventListener() ๋ก ์ฝ๋ฐฑํจ์ ๋ด์ modals[i].style.display = 'block'; ๋ฅผ ์คํํด๋ฌ๋ผ๋ ์ฝ๋์ด๋ฏ๋ก, ๋ฐ๋ณต๋ฌธ๊ณผ ๋์์ ์คํ๋์ง ์๊ณ ๋์ค์ ํด๋ฆญํ์ ๋ ์คํ๋๋ค.
- ๊ทธ ๊ฒฐ๊ณผ, ๋ฐ๋ณต๋ฌธ์ ํด์ํ ํ, ๋๊ตฐ๊ฐ๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด addEventListener() ๋ด์ modals[i].style.display = 'block'; ์ฝ๋๊ฐ ์คํ๋์ด์ผ ํ๋๋ฐ ์ด๋ฏธ ๋ฐ๋ณต๋ฌธ์ ์คํ์ด ๋๋ ์ ์ญ๋ณ์ i ๊ฐ 3 ์ด ๋์ด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์ modals[i].style.display = 'block'; ์ i ์ 3 ์ ์ง์ด๋ฃ์ผ๋ ค๋ค๋ณด๋ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
- ๋ฐ๋ผ์ for ๋ฐ๋ณต๋ฌธ์์ i ๋ณ์๋ฅผ ๋ง๋ค ๋ var ํค์๋ ๋์ ์ let ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒ์๊ฐ ์ค๊ดํธ ์์ด๋ฏ๋ก, modals[i].style.display = 'block'; ๋ฅผ ์คํํ๊ธฐ ์ํด ๋ฐ๋ณต๋ฌธ์ด ๋๊ณ ๋ ์ดํ์๋ for ๋ฐ๋ณต๋ฌธ ์์ ๋จ์์๋ i ๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๊ฒ ๋๋ค.
๐ for ๋ฌธ์์ var ๋์ let ์ ์ฌ์ฉํ๋ ์ด์
- ๋ฌธ์ 5, ๋ฌธ์ 6 ์ ๊ฐ์๋ฅผ ๋ฐ๋ณตํด์ ๋ค์ด๋ ์ค์ฝํ์ ๋ํ ๊ฐ๋ ์ด ๋ถ์กฑํ์ง ์ ๋๋ก ์ดํด๊ฐ ์ ๋์ด์ ๊ตฌ๊ธ๋ง์ ํ ํ ์ฐธ๊ณ ํ ๋ง ํ ๋ธ๋ก๊ทธ ๋ฐ ์์ ๋งํฌ๋ฅผ ๊ฑธ์ด๋๋ค.
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > JavaScript ES6' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript / ES6] Spread Operator (0) | 2022.04.21 |
---|---|
[JavaScript / ES6] Template literals ์์๋ณด๊ธฐ (0) | 2022.04.12 |
[JavaScript / ES6] ๋ณ์ ์ ๋ฌธ๋ฒ ์ด์ ๋ฆฌํ๊ธฐ_2 (0) | 2022.04.11 |
[JavaScript / ES6] ๋ณ์ ์ ๋ฌธ๋ฒ ์ด์ ๋ฆฌํ๊ธฐ (0) | 2022.04.11 |
[JavaScript / ES6] this & arrow function ์ฐ์ต๋ฌธ์ ํ๊ธฐ (0) | 2022.04.11 |