๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[๊ฐœ๋ฐœ] Practice/JavaScript ES6

[JavaScript / ES6] ๋ณ€์ˆ˜ ์—ฐ์Šต๋ฌธ์ œ ํ’€๊ธฐ

by Connecting-the-dots 2022. 4. 11.
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 ์€ ๊ฐ•์˜๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๋“ค์–ด๋„ ์Šค์ฝ”ํ”„์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ๋ถ€์กฑํ•œ์ง€ ์ œ๋Œ€๋กœ ์ดํ•ด๊ฐ€ ์•ˆ ๋˜์–ด์„œ ๊ตฌ๊ธ€๋ง์„ ํ•œ ํ›„ ์ฐธ๊ณ ํ• ๋งŒ ํ•œ ๋ธ”๋กœ๊ทธ ๋ฐ ์˜์ƒ ๋งํฌ๋ฅผ ๊ฑธ์–ด๋‘”๋‹ค.
 

[Javascript] for ๋ฌธ์—์„œ var ๋Œ€์‹  let ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  + setTimeout()

๋ณธ๋ฌธ์œผ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋ณ€์ˆ˜์˜ ์žฌ์„ ์–ธ, ์žฌํ• ๋‹น, ๋ณ€์ˆ˜ ์ฐธ์กฐ, ๊ทธ๋ฆฌ๊ณ  ์œ ํšจ๋ฒ”์œ„(Scope)์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜ ํŽ˜์ด์ง€์—์„œ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค. var, let, const ์ฐจ์ด์ ๊ณผ ์œ ํšจ๋ฒ”์œ„ (Scope) ์ž‘์—…์„ ํ•  ๋•Œ ๋ฌด์˜์‹์ ์œผ๋กœ

fromnowwon.tistory.com

 

 

728x90
๋ฐ˜์‘ํ˜•