# ๐Ÿฆ„ ๋€จํƒœ์€ผํƒœ๋นตํƒœ์กฐ ## ์กฐ์› ์†Œ๊ฐœ #### ๊นƒํ—ˆ๋ธŒ ๋งž~ ํŒ”ํ•ด์ฃผ์„ธ์š”~ ๐Ÿ˜๐Ÿ˜ - ๋€จํƒœ์กฐ ๋Œ€์žฅ+๋งˆ์Šค์ฝ”ํŠธ : [์ž„๊ทœํƒœ](https://github.com/lktgt15) - ๋€จํƒœ์กฐ ์ซ„๋‹ค๊ตฌ : [์ด์—ฐ์ฃผ](https://github.com/joylish) ## ๐Ÿ”ฅ ์ด๋ฒˆ์ฃผ ์ž‘์—…๋ฌผ์„ ์ „์‹œํ•ฉ๋‹ˆ๋‹ค~ ### 01. ๋ถ์นดํŽ˜ - ๐Ÿ‘ถ ๋€จํƒœ [์ง€๊ธˆ ๋ฐ”๋กœ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ๐Ÿƒโ€โ™€๏ธ](https://codepen.io/lktgt15/pen/abBjaxZ) ![](https://i.imgur.com/7FiabIZ.png) - ๐Ÿฐ ์—ฐ์ฃผ [์ง€๊ธˆ ๋ฐ”๋กœ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ๐Ÿƒโ€โ™€๏ธ](https://codepen.io/joylish/pen/PobaMyB) ![](https://i.imgur.com/IpemVUJ.png) ### 02. ๋กœ๋˜ - ๐Ÿ‘ถ ๋€จํƒœ [์ง€๊ธˆ ๋ฐ”๋กœ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ๐Ÿƒโ€โ™€๏ธ](https://codepen.io/joylish/pen/gOLjjVg) ![Before](https://i.imgur.com/GrbTI7W.png) ![After](https://i.imgur.com/Ci9cZDz.png) - ๐Ÿฐ ์—ฐ์ฃผ [์ง€๊ธˆ ๋ฐ”๋กœ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ๐Ÿƒโ€โ™€๏ธ](https://codepen.io/joylish/pen/BaQPLyw) ![](https://i.imgur.com/OZTBhBj.png) ## ๐Ÿ– ์ด๋ฒˆ์ฃผ ๊ณต์œ ํ•  ๊ฒƒ - [codepen](https://codepen.io/)์„ ์“ฐ์‹œ๋ฉด ์„œ๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด์š”! - [๊นจ์•Œ ์ง์ง€์ž๋ž‘] ๊ทœํƒœ๋‹˜์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ ์ž๋ฃŒ๋ฅผ ๊ณต์œ ํ•ด์ฃผ์…จ์–ด์š”! ์€ผํƒœ๋Œ€์žฅ๋‹˜์€ ๐Ÿ‘น ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋Œ€๋งˆ์™• DMW ๐Ÿ‘น ## ๐Ÿ“™ ์ด๋ฒˆ์ฃผ ๊ณต๋ถ€ ์ •๋ฆฌ ### DOM ( Document Object Model ) - ๋ฌธ์„œ์˜ ๋‚ด์šฉ์„ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ - `<tag>` : ๊ฐ์ฒด๋ฅผ ํ‘œํ˜„, ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง, ๋…ธ๋“œ๋ผ๊ณ  ์ƒ๊ฐ, ๋…ธ๋“œ์˜ ํƒ€์ž…(Element,Text ๋“ฑ),์ด๋ฆ„,๋ฐธ๋ฅ˜๋“ฑ์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Œ - Element๋Š” ๋ฐธ๋ฅ˜๊ฐ€ ์—†๊ณ  name์ด ์žˆ์Œ - TextNode๋Š” name์ด ์—†๊ณ  ๋ฐธ๋ฅ˜๊ฐ€ ์žˆ์Œ `<h1>(E) => <TextNode>(T)` ์ผ ๋•Œ TextNode๋ฅผ ์ฐพ์œผ๋ ค๋ฉด h1์„ ์ฐพ์•„์•ผํ•จ. ์ด๋ฆ„์œผ๋กœ ์ฐพ๊ธฐ, ๋ฃจํŠธ๋ถ€ํ„ฐ ํƒ์ƒ‰ ๋“ฑ ๋ฐฉ๋ฒ•์ด ๋‹ค์–‘ํ•จ 1. Browser๋Š” html ํŒŒ์‹ฑ 2. tag(element) ๊ฐ์ฒด๋กœ ์ƒ์„ฑ 3. Tree ๊ตฌ์„ฑ 4. Tree๋Œ€๋กœ ํ™”๋ฉด์— ๊ทธ๋ฆฐ๋‹ค. *DOM TREE*๋ฅผ ์กฐ์ž‘ํ•˜๋ฉด ํ™”๋ฉด์ด ๋ณ€๊ฒฝ๋œ๋‹ค. => Dynamic HTML ํšจ๊ณผ๋ฅผ ์ค€๋‹ค. ### ๊ฐ€๋ณ€์ธ์žํ•จ์ˆ˜ ```JavaScript <script type="text/javascript"> function myFunc(num1,num2){ console.log(num1+"/"+num2); } /* myFunc(1); ์ธ์ž ๋ถ€์กฑ : ์—๋Ÿฌ์•ˆ๋‚จ myFunc(2,3); myFunc(4,5,6); ์ธ์ž ์ดˆ๊ณผ : ์—๋Ÿฌ์•ˆ๋‚จ */ function sumAll(){ let ret = 0; for(let i=0;i<arguments.length;i++){ ret += arguments[i]; } return ret; } console.log(sumAll(10)); console.log(sumAll(10,20)); console.log(sumAll(10,20,30)); </script> ``` ### ํ•จ์ˆ˜ ์ด๋ฆ„ ๊ฒน์นจ, ํ•จ์ˆ˜ ์ธ์ž๋กœ ๋„˜๊น€, ํ•จ์ˆ˜ ๋ฆฌํ„ด ```HTML5 <script type="text/javascript"> function myFunc(num1,num2){ console.log(num1+"/"+num2); } /* myFunc(1); ์ธ์ž ๋ถ€์กฑ : ์—๋Ÿฌ์•ˆ๋‚จ myFunc(2,3); myFunc(4,5,6); ์ธ์ž ์ดˆ๊ณผ : ์—๋Ÿฌ์•ˆ๋‚จ */ // ๊ฐ€๋ณ€์ธ์žํ•จ์ˆ˜ function sumAll(){ let ret = 0; for(let i=0;i<arguments.length;i++){ ret += arguments[i]; } return ret; } console.log(sumAll(10)); console.log(sumAll(10,20)); console.log(sumAll(10,20,30)); function big(value1,value2){ return value1>value2?value1:value2; } console.log(big(100,200)); </script> <script type="text/javascript" src="./js/util.js"></script> ``` - ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜ ์ด๋ฆ„์ด ๊ฒน์น  ์ˆ˜ ์žˆ๋‹ค. ```HTML <script type="text/javascript"> function myFunc(num1,num2){ console.log(num1+"/"+num2); } /* myFunc(1); ์ธ์ž ๋ถ€์กฑ : ์—๋Ÿฌ์•ˆ๋‚จ myFunc(2,3); myFunc(4,5,6); ์ธ์ž ์ดˆ๊ณผ : ์—๋Ÿฌ์•ˆ๋‚จ */ // ๊ฐ€๋ณ€์ธ์žํ•จ์ˆ˜ function sumAll(){ let ret = 0; for(let i=0;i<arguments.length;i++){ ret += arguments[i]; } return ret; } console.log(sumAll(10)); console.log(sumAll(10,20)); console.log(sumAll(10,20,30)); function process(){ function big(value1,value2){ return value1>value2?value1:value2; } console.log(big(100,200)); } process(); console.log("outer : "+big(100,200)); </script> <script type="text/javascript" src="./js/util.js"></script> ``` - ํ•จ์ˆ˜ ์•ˆ์— ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ script๊ฐ„ ์ถฉ๋Œ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค. ```HTML <script type="text/javascript"> function display(viewHandler){ let msg = "hello World!"; // msg ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚ด๊ธฐ : ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„. // ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ์ฝ”๋“œ (==> ํ•จ์ˆ˜)๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ์‹คํ–‰ viewHandler(msg); } display(function(msg){ alert(msg); }); </script> </head> <body> <div id="greeting"></div> <script type="text/javascript"> display(function(msg){ document.getElementById("greeting").innerText = msg; }); </script> </body> ``` - ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋„˜๊ธฐ๋ฉด ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ## ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ```JavaScript // ์ƒ์„ฑ์žํ•จ์ˆ˜ : ๊ทœ์น™์ด ์—†๋‹ค. // : ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์—์„œ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ๋•Œ ๋น„๋กœ์†Œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ๋™์ž‘ํ•œ๋‹ค function Person(name,age){ // ์ƒ์„ฑ์žํ•จ์ˆ˜์—์„œ this๋Š” ๋งŒ๋“ค์–ด์งˆ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. // ๋™์  ์†์„ฑ ์ถ”๊ฐ€ this.name = name; this.age = age; this.increaseAge = function(){ this.age++; } } let p1 = new Person("๊น€์žฌํ™˜",26); ``` ๋‹ค๋งŒ increaseAge๋Š” ๊ฐ์ฒด๋งˆ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค. ```JavaScript // ์ƒ์„ฑ์žํ•จ์ˆ˜ : ๊ทœ์น™์ด ์—†๋‹ค. // : ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์—์„œ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ๋•Œ ๋น„๋กœ์†Œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ๋™์ž‘ํ•œ๋‹ค function Person(name,age){ // ์ƒ์„ฑ์žํ•จ์ˆ˜์—์„œ this๋Š” ๋งŒ๋“ค์–ด์งˆ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. // ๋™์  ์†์„ฑ ์ถ”๊ฐ€ this.name = name; this.age = age; } // ํด๋ž˜์Šค๋ฅผ ํ‰๋‚ด๋‚ธ๋‹ค. // Person ํ•จ์ˆ˜ ๊ฐ์ฒด์— prototype Person.prototype.increaseAge = function(){ this.age++; }; let p1 = new Person("๊น€์žฌํ™˜",26); let p2 = new Person("์†ก์ค‘๊ธฐ",37); console.log(p1.name+"/"+p1.age); console.log(p2.name+"/"+p2.age); ``` ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ๊ฐ™์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ๊ตฌ์กฐ๋Š” ๋‹น์—ฐํžˆ ๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค. ### ๊ณ ์ฐจํ•จ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ฑฐ๋‚˜ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ```JavaScript let arr = [200,10,60,450,30]; arr.forEach(function(element){ console.log(element); }); { let res = arr.filter(function(element,index){ // ๊ฒฐ๊ณผ์— ํฌํ•จ์‹œํ‚ค๊ณ  ์‹ถ์œผ๋ฉด true, ๋ฏธํฌํ•จ์ด๋ฉด false // return element<100; return index%2==1; }); console.log(res); } { let res = arr.map(function(element){ return element**2; }); console.log(res); console.log(arr); } { let res = arr.filter(element => element < 100).map(element => element+50); console.log(res); } ``` ## this ```JavaScript // this : ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด, ๋ฏธ๋ž˜์— ์ƒ์„ฑ๋  ๊ฐ์ฒด ์ž๊ธฐ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ž๊ธฐ์ฐธ์กฐ๋ณ€์ˆ˜ // : ํ˜ธ์ถœ ์‹œ์ ์— ๊ฒฐ์ •๋จ function sayHello(){ console.log(this); console.log("Hello "+this.name); } sayHello(); // ์ผ๋ฐ˜ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ : this --> ์ „์—ญ๊ฐ์ฒด(window) let greeting = { name : "๊น€์žฌํ™˜", sayHi : sayHello, } greeting.sayHi(); // ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ๋กœ ํ˜ธ์ถœ : this --> ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฐ์ฒด new sayHello(); // ์ƒ์„ฑ์žํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ : this --> ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด ``` ## Event - ํŠน๋ณ„ํ•œ ์‚ฌ๊ฑด, ์ƒํ™ฉ - UI์ƒ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์–ด๋–ค Action, ์ƒํ™ฉ 1. Event : ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ ๊ด€๋ จ ์ •๋ณด 2. Event Source : ์ด๋ฒคํŠธ ๋ฐœ์ƒ ๊ทผ์›์ง€(๋Œ€์ƒ) 3. Event Handler : ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ์ฒ˜๋ฆฌ๊ธฐ ```HTML <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> function changeColor(){ console.log(this); this.style.backgroundColor = 'pink'; console.log('change'); } </script> </head> <body> <!-- <h1 onclick="this.style.backgroundColor = 'pink';console.log('change');" style="background-color: grey;">์ตœ๊ฐ• 6๋ฐ˜ ํ™”์ดํŒ…!!!</h1> --> <h1 onclick="changeColor();" style="background-color: grey;">์ตœ๊ฐ• 6๋ฐ˜ ํ™”์ดํŒ…!!!</h1> </body> </html> ``` changeColor()๋Š” h1๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— this๋Š” Window๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ```HTML <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> function changeColor(element){ console.log(element); element.style.backgroundColor = 'pink'; console.log('change'); } </script> </head> <body> <!-- <h1 onclick="this.style.backgroundColor = 'pink';console.log('change');" style="background-color: grey;">์ตœ๊ฐ• 6๋ฐ˜ ํ™”์ดํŒ…!!!</h1> --> <h1 onclick="changeColor(this);" style="background-color: grey;">์ตœ๊ฐ• 6๋ฐ˜ ํ™”์ดํŒ…!!!</h1> </body> </html> ```