-
[Javascript/ES6] for ( ) ๋ฌธ & NodeListjavascript 2019. 5. 5. 18:46
์๋ ํ์ธ์, Jerry์ ๋๋ค :)
๊ณ์ํด์ ์ค์ฝํ์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ํ๊ณ ์์ต๋๋ค. ๋ธ๋ก ์ค์ฝํ์ ํนํ ๋ง์ ์๊ธฐ๋ฅผ ํ๊ณ ์๋๋ฐ์. ์ด๋ฒ ํฌ์คํ ๋ ๋ธ๋ก ์ค์ฝํ์ ๊ด๋ จ๋ ๋ด์ฉ์ ํฌ์คํ ํ๋ ค๊ณ ํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ธ๋ก ์ค์ฝํ์์ ๋นผ๋จน์ผ๋ฉด ์ ๋ ๊ตฌ๋ฌธ์ด ์์ฃ ? ๋ค, ๋ฐ๋ก for( ) ๋ฌธ๊ณผ if( ) ๋ฌธ์ด์ฃ . if( ) ๋ฌธ๊ณผ for( )์ ์ฐจ์ด์ ์ ์กฐ๊ฑด์ ์ ๋ณ์ ์ ์ธ ์ฌ๋ถ๊ฒ ์ฃ . for( ) ๋ฌธ๋ ๋ฏธ๋ฆฌ ์ ์ธ๋ผ์๋ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ์ง๋ง ์กฐ๊ฑด์ ์์์ ์ ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ค ๋ณด๋ ํค์๋์ ๋ฐ๋ผ ์ค์ฝํ๊ฐ ๋ฌ๋ผ์ง๋๋ค.
var ํค์๋์ let ํค์๋๊ฐ for( ) ๋ฌธ์์ ์ด๋ป๊ฒ ๋ค๋ฅธ ์ค์ฝํ๋ฅผ ๊ฐ๋์ง ์์๋ณด๊ฒ ์ต๋๋ค!
for.html
<html> <head> <meta charset='utf-8'> <title></title> </head> <body> <div> <ul> <li>1~10</li> <li>11~20</li> <li>21~30</li> </ul> </div> <script src='for.js'></script> </body> </html>
for.js
var nodes = document.querySelector('ul'); for(var k = 0; k < nodes.children.length; k++){ var el = nodes.children[k]; el.onclick = function(event){ event.target.style.backgroundColor = 'yellow'; console.log(k); } }
HTML์ ํ์ผ์ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ด๋ณด๊ฒ ์ต๋๋ค. ์๋ ์บก์ฒ๋ฅผ ๋ณผ๊น์?
JS ์์ค(for.js)๋ฅผ ๋ณด์ธ์. nodes๋ผ๋ ๋ณ์์ querySelector('ul')์ ๋ด์ต๋๋ค.
· Document.querySelector( ) : Document๋ ์ ํ์ ํน์ ์ ํ์ ๋ญ์น๋ก ๋ณด์๋ฉด ๋ฉ๋๋ค. querySelector('element, id, class๋ช ') ์๊ดํธ์๋ element, id, class๋ช ์ด ๋ค์ด์ฌ ์ ์๊ณ , element๋ class๋ช ์ด ์ฌ๋ฟ์ผ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ฒ์ element, class๋ช ์ด ๋ณ์์ ๋ด๊น๋๋ค.
์ for.js ์์ค์ ๊ฒฝ์ฐ querySelector( )๋ก <ul>์ ๋ด์ผ๋ฉด์ html์ ์์ฑ๋ 3๊ฐ์ (์์ element์ธ)<li>๋ ์ ๋ถ ๋ด๊ธฐ๋๋ฐ ์ด๊ฒ์ DOM(Document Object Model)์์ NodeList๋ผ๊ณ ํฉ๋๋ค. console.log๋ก ์ฐ์ด์ ์ด๋ป๊ฒ ๋ด๊ฒผ๋์ง ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
NodeList
var nodes = document.querySelector('ul'); console.log(nodes); // +์ถ๊ฐ) NodeList๋ฅผ ํ์ธํ๊ธฐ ์ํด console.log( ) ์์ฑ
NodeList๋ฅผ ํ์ธํ๊ธฐ ์ํด์ ์์ค์ console.log(nodes)๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. ๊ฒฐ๊ณผ๋ ์๋ ์บก์ฒ๋ก ํ์ธํด๋ณผ๊น์?
nodes.children.length๋ NodeList์ ์๋ฆฌ๋จผํธ ์๋ก 3์ด ๋์ต๋๋ค. ๋ฐ๋ณต๋ฌธ์์ ์กฐ๊ฑด์ ์ ์ธ ๋ฒ๋งํผ ๋ฃจํ๋ฅผ ๋๊ฒ ๋ค๋ ๊ฒ์ ๋๋ค.
๋ค์ for.js ์์ค๋ก ๋์๊ฐ์,
var el = nodes.children[k]; el.onclick = function(event){ event.target.style.backgroundColor = 'yellow'; console.log(k); }
for( ) ๋ฌธ์ ๋ฐ๋ณตํ๋ฉฐ <li> ์๋ฆฌ๋จผํธ๋ง๋ค onclick ์ด๋ฒคํธ๋ฅผ ์ค์ ํด์ค๋๋ค. ํด๋น <li> ์๋ฆฌ๋จผํธ๋ฅผ ํด๋ฆญํ ๋๋ง๋ค ๋ฐฐ๊ฒฝ์์ด ๋ ธ๋์('yellow')์ผ๋ก ๋ฐ๋๊ฒ ํ์ฃ .
์ค์ํ ๊ฑด console.log(k)์ ๋๋ค. <li> ์๋ฆฌ๋จผํธ๋ฅผ ํด๋ฆญํ ๋๋ง๋ค k์ด ๊ฐ์ด ์ฐํ๋๋ฐ ํญ์ 3์ด ์ฐํ๋๋ค. ์ด์ ์์ฃผ ์กฐ๊ธ ๋ณต์กํด์ง๋๋ค.(ํ์์ ์ฃผ๊ด์ ์ธ ์๊ฒฌ์ ๋๋ค. ์ ์กฐ๊ธ ํท๊ฐ๋ฆฌ๊ณ ๋ณต์กํ๊ฑฐ๋ ์...)
Console์ฐฝ์๋ ๋ฃจํ๋ฅผ ์ ๋ถ ๋๊ณ ๋ ์ดํ์ ๊ฐ์ธ 3์ด ์ฐํ๋๋ค. 0๋ถํฐ ์์ํด์ length๊ฐ 3 ๋ฏธ๋ง์ผ๋ก ๋ฃจํ๋ฅผ ๋๋ผ๊ณ ํ๋๋ฐ ์ 0, 1, 2๋ก ๋๊ณ 3์ด ์ฐํ๋ ๋ฌผ์ผ์ ๋ค๋ฉด for( ) ๋ฌธ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ๊ทธ ํ๋ก์ธ์ค(?)๋ฅผ ์๊ณ ๊ณ์ ์ผ ํฉ๋๋ค.
0์ธ ์ํ๋ก 0 < 3์ด true์ด๊ธฐ ๋๋ฌธ์ for( ) ๋ฌธ ๋ด๋ก ๋ค์ด๊ฐ ๋ก์ง์ ๋๊ณ ๋ ์ดํ์ ์ฆ๊ฐ ์ฐ์ฐ์(k++)๋ก ๊ฐ๋๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ณด๊ณ ๋ค์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์๊ณ ๊ณ์๋ ๋ถ๋ค์ ์ด ๋ถ๋ถ์ ๋์ด๊ฐ์ ๋ ๊ด์ฐฎ์ต๋๋ค. ๊ทธ๋ฆผ์ ๋ณด๊ณ ์ดํด๊ฐ ๊ฐ์๋์?
์ฆ,
1. โ k = 0์ผ๋ก ์์ํด์
2. โก 0 < 3 ์ด true์ด๊ธฐ ๋๋ฌธ์
3. โข ๋ก์ง์ ๋ค ๋๊ณ
4. โฃ ์ฆ๊ฐ ์ฐ์ฐ์(k++)๋ก ๊ฐ์ k์ ๊ฐ์ ํ๋ ์ฆ๊ฐ์ํต๋๋ค.
5. ๋ค์ โก 1 < 3 ์ด true์ด๊ธฐ ๋๋ฌธ์
6. โข ๋ก์ง์ ๋ค ๋๊ณ
7. ๋ค์ โฃ ์ฆ๊ฐ์ฐ์ฐ์(k++)๋ก ๊ฐ์ k์ ๊ฐ์ ํ๋ ์ฆ๊ฐ์ํต๋๋ค.
8. โก 2 < 3 ์ด true์ด๊ธฐ ๋๋ฌธ์
9. โข ๋ก์ง์ ๋ค ๋๊ณ
10. ๋ค์ โฃ ์ฆ๊ฐ์ฐ์ฐ์(k++)๋ก ๊ฐ์ k์ ๊ฐ์ ํ๋ ์ฆ๊ฐ์ํต๋๋ค.
11. k๋ 3์ด ๋์์ต๋๋ค.
12. โก 3 < 3 ์ด false์ด๊ธฐ ๋๋ฌธ์
13. for( ) ๋ฌธ์ผ๋ก ๋ค์ด๊ฐ์ง ์์ต๋๋ค. โข ๋ก์ง์ ์คํํ์ง ์๋ ๊ฑฐ์ฃ .
์ด๊ฒ์ ์ค๋ช ํ ์ด์ ๊ฐ ์์ต๋๋ค.
์๋์ let ํค์๋์ ๊ฒฐ๊ณผ์ ๊ฒฝ์ฐ, ํด๋ฆญํ ์๋ฆฌ๋จผํธ๋ง๋ค ๊ฐ์ด ๋ค๋ฅธ๋ฐ 0๊ณผ 1, ๊ทธ๋ฆฌ๊ณ 2 ๋ง ๋์ค๊ธฐ ๋๋ฌธ์ ์ด ํฌ์คํ ์ ์ฝ๋ ๋ถ์ด ํท๊ฐ๋ คํ์ค๊น ๋ด ์ค๋ช ํ์ต๋๋ค :)
๋ง์ฝ, ๋ด๊ฐ ํด๋ฆญํ element์ ์๋ฒ์ ์๊ณ ์ถ๋ค๋ฉด?
์ฒซ ๋ฒ์งธ๋ฅผ ํด๋ฆญํ์ ๋๋ 1์ด Console์ ๋์ค๊ณ ๋ ๋ฒ์งธ๋ฅผ ํด๋ฆญํ์ ๋ 2, ๊ทธ๋ฆฌ๊ณ ์ธ ๋ฒ์งธ๋ 3์ด ๋์ค๊ฒ ํ๋ค๋ฉด var ํค์๋๋ฅผ let ํค์๋๋ก ์์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์์ค๋ฅผ ๋ณ๊ฒฝํด๋ณด๊ฒ ์ต๋๋ค.
for(let k = 0; k < nodes.children.length; k++){
๋ฐ๋๋ ๊ฒ์ for( ) ๋ฌธ ์กฐ๊ฑด๋ถ ๋ด์ var ํค์๋๋ก ์ ์ธํ๋ k ๋ณ์๋ฅผ let ํค์๋๋ฟ์ ๋๋ค. ์์ ์ดํ์ ์ด๋ป๊ฒ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋์๋์ง ๊ถ๊ธํด์ง๋๋ค! ๊ฐ์ด ์๋์ ์บก์ฒ(์์งค)๋ฅผ ํ์ธํด๋ณด์์ฃ .
์ง์ ์ฝ๋ฉํ์ ์ ํค์๋๋ง๋ค ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ฒ ์ถ๋ ฅ๋๋ ๊ฒ์ ๋์ผ๋ก ํ์ธํด๋ณด์ธ์!
ํฌ์คํ ์ ๋ง๋ฌด๋ฆฌํ๋ฉด์,
์นด๊ณต์กฑ์ด ๋ง์ ๋ถ๋ค์๊ฒ ์์ ๋จน๊ณ ์๋ ๊ธฐ์ฌ๋ฅผ ๋ดค์ต๋๋ค. ๊ณต๋ถํ๋ ๊ณณ์ด ์๋ ๊ณณ์์ ๊ณต๋ถํ์๋ ๋ถ๋ค์ด ์๋ค ๋ ๋ ๋ถ๋ค์๊ฒ ์ฐ๋ฆฟ์ฐ๋ฆฟ ๋์น๋ฅผ ์ฃผ๋ ๊ฑด ๋ฌธ์ ๊ฐ ์๋ค๊ณ ๋ด ๋๋ค๋ง, ์นด๊ณต์กฑํํ ์นด๊ณต ๋๋ค, ๋ฑ ํํ ๋ง์ ๊ธ์ ๋ด๊ณ ๊ฑฐ์ง๋, ํ์์ถฉ๋ค์ด๋ ์ฌํ ๋๊ธ๋ค์ด 99%์์ต๋๋ค. ์์ํ๋๊ตฐ์. (์, ๋ด๊ฐ ์นด๊ณต์กฑ์ด๋ผ) ์ผํ๋ฉด์ ์ฃผ๋ง์ ๋ ธํธ๋ถ์ ๋ค๊ณ ์นดํ ๊ฐ์ ๊ณต๋ถํ๊ฑฐ๋ ํฌ์คํ ํ๊ฑฐ๋ ํฉ๋๋ค. ์ง ๊ทผ์ฒ ๋์๊ด์ ๊ฐ๋ ค๋ฉด 20~30๋ถ์ ๋ฒ์ค๋ฅผ ํ๊ณ ๋๊ฐ์ผ ํ๊ณ , ๋์๊ด๋ ์ด๋์ค์ด ํ์ํ๋ค ๋ณด๋ฉด ์ ๊ฐ์ง ์๊ฒ ๋์ฃ . ๊ทธ๋ง์ ๋ ์กฐ๊ธ๋ง ๋ฆ์ผ๋ฉด ์๋ฆฌ๋ ์๊ณ , ์์ ์๋ ๋ถ๋ค ๋ฐ๋ฆฌ๊ณ ๋์ค์๋ ๋ถ๋ชจ๋๋ค๋ ๊ณ์ ์ ๋์๊ด๋ ๋ง๋ง์น ์๊ฒ ์๋๋ฝ์ต๋๋ค. ์ฌ๋ฌ ์ํฉ์ ๊ณ ๋ คํ๋ฉด ์นดํ๊ฐ ์ข์ฃ . ํผ์ ๊ฐ์ 4์ธ์ ์ฐจ์งํ๋ ์ฌ๋๋ค ๋ณด๋ฉด ์ ๋ ๋์ด ์ฐํธ๋ฆฌ๊ฒ ๋๊ณ ์ฌ๋งํ๋ฉด ๋ง์ ์๋ฆฌ๋ฅผ ์ฐจ์งํด์ ๋ฏผํ ์ฃผ๊ธฐ ์ซ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ปคํผ ํ ์ ์ํค๊ณ 2~3์๊ฐ๋ง ์ง๋๋ ๊ดํ ์ฃ์กํด์ ธ์ ํ ์ ๋ ์ํค๊ฑฐ๋ ํฉ๋๋ค. ๊ธฐ์ฌ ๋ด์ฉ์ธ์ฆ์จ ๋ณ๋ค๋ฐฉ์ ๋ช ๊ฐ ๋งค์ฅ์์ ์ฝ์ผํธ๋ฅผ ์์ ์์ด๋ค๋ ๋ด์ฉ์ด์๊ณ ๋๊ธ์์ ์นด๊ณต์กฑ์ ์์ฒญ๋๊ฒ ๊น๋๊ตฐ์. '๊ทธ๋ฌ๋ ๊ณต๋ถ๋ง ํ์ง ์ฌ๋๋ถํฐ ๋ผ๋ผ', '์ง์์ ํด๋ผ', '๋์๊ด ๊ฐ์ ๊ณต๋ถํด๋ผ', 'ํ์์ฌ๋ง ๊ฐ๋ ์ฐจ์ ์นดํ์์ ๊ณต๋ถํ๋ ๋๋ค ๋ณด๋ฉด ๊ณต๋ถํ๋ ๊ผด ๋ชป ๋ดค๋ค' ๋ฑ.. ์.. ์ผ๋ง๋ ๋๋จํ์ ๋ถ๋ค์ด๊ธธ๋, ์ผ๋ง๋ ๊ณต๋ถ ๋ง์ด ํด์ ์ ๋จน๊ณ ์ ์ฌ์๋ ๋ถ๋ค์ด๊ธธ๋ ๊ทธ๋ฐ ๋๊ธ์ ๋ง ์จ ๋ด๋ ค๊ฐ์๋์ง ๋ถ๋ฝ๋๋ผ๊ณ ์. ์ฌ๋๋ถํฐ ๋๋ผ๋, ๊ทธ๋ฐ ํํ ๋๊ธ๋ค ๋ค์๋ ๋ถ๋ค์ด ๋ถ๋ช ์นดํ์์ ๋ณธ ํน์ ์ธ์ ์์ํ๋ฉฐ ๋๊ธ์ ์ฐ์ จ์ ๊ฑฐ๋ฅผ ์๊ฐํ๋ฉด ์๋ฆ ๋์ต๋๋ค. ์นดํ์์ ๊ณต๋ถํ๋ค ๋ง๋ ์ธ์์ด ์ฌ๊น ๋ฌด์ญ๋ค์. (ํฌ๋ํฌ๋..)
Jerry ์์ต๋๋ค :)
'javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/ES6] Arrow(ํ์ดํ) ํจ์ - ๊ตฌ๋ฌธํธ (0) 2019.05.10 [JavaScript/ES6] const ํค์๋ (0) 2019.05.07 [Javascript/ES6] try - catch ์ switch - case (0) 2019.05.04 [JavaScript/ES6] let ๊ณผ this ํค์๋ (0) 2019.04.29 [JavaScript/VanillaJS] ์กฐ์ฉํ ์๋(silence alarm) ์น ์ฑ ๋ง๋ค๊ธฐ - ๋ฒ์ธํธ(feat. ES6) (1) 2019.04.28