(์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ) 5. ํด๋ก์
๐ ๊ธฐ์ ์ฑ ์คํฐ๋
23๋
1์๋ถํฐ ํ๋ ์ค์ธ ๊ต์ก์์, ๋ป์ด ๋ง๋ ๋๋ฃ๋ค๊ณผ ํจ๊ป ์งํํ๊ฒ ๋ ์คํฐ๋
์ฒ์ ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ
์์ ์ ์ฝ์๊ณ ์ ์ํ๋ฉด์ ์์!
์์ผ๋ก๋ ๊พธ์คํ ๊ธฐ์ ์์ ์ ์ฝ๊ณ ํจ๊ป ๋ฐ์ ํ๋ ์๊ฐ์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ค!
์ฑ ์ ์๋ ๋ด์ฉ๋ณด๋จ, ์ฝ์ผ๋ฉด์ ํผ์ ์ ๋ฆฌํ ๋ด์ฉ๋ค ์์ฃผ๋ก ์์ฑํ์!
๐ ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ 5. ํด๋ก์
์ผ์: 2์ 3์ผ 20์
ํด๋ก์
-
MDN: ํจ์(inner)์ ๊ทธ ํจ์๊ฐ ์ ์ธ๋ ๋น์(outer)์ lexical environment์ ์ํ๊ด๊ณ์ ๋ฐ๋ฅธ ํ์
-
์ด๋ค ํจ์(์ธ๋ถํจ์) A
์์ ์ ์ธํ๋ณ์ a
๋ฅผ ์ฐธ์กฐํ๋๋ด๋ถํจ์ B
๋ฅผ ์ธ๋ถ๋ก ์ ๋ฌํ ๊ฒฝ์ฐ, A์ ์คํ ์ปจํ ์คํธ๊ฐ ์ข ๋ฃ๋ ์ดํ์๋๋ณ์ a
๊ฐ ์ฌ๋ผ์ง์ง ์๋(๊ฐ๋น์ง ์ฝ๋ ํ ๋์ง ์๋) ํ์ -
Quiz1) p119. ์์ 5-3. ๋ง๋ก ์ค๋ช ํด๋ณด๊ธฐ
var outer = function () { var a = 1; var inner = function () { return ++a; }; return inner; // ํจ์ ํธ์ถ์ด ์๋ ํจ์ ์์ฒด๋ฅผ ๋ฐํ }; var outer2 = outer(); // outerํจ์๋ ํจ์๊ฐ ์ข ๋ฃ๋์์๋ ์ดํ์ ๋ฐํ๋๋ inner๋ก ์ธํด์ outer์ ๊ฐ ์ค ํ๋์ธ a๊ฐ ๊ณ์ ์ฐธ์กฐ๋จ
bind()
-
call, apply์์ ์ฐจ์ด
-
Quiz2) p127. ์์ 5-8. ๋ง๋ก ์ค๋ช ํด๋ณด๊ธฐ
fruits.forEach(function(fruit) { var $li = document.createElement('li'); $li.innerText = fruit; $li.addEventListener('click', alertFruit.bind(null, fruit); $ul.appendChild($li); }); // bind์ ์ฒซ๋ฒ์งธ ์ธ์๋ . ์์ ํจ์์ this๋ก ์ ๋ฌ๋๊ณ ๊ทธ ๋ค๋ถํฐ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋๋ค. // ์ฌ๊ธฐ์ bind๋ this๋ฅผ ์ง์ ํ๋ ๋ชฉ์ ๋ณด๋ค๋ bind๊ฐ this ์ง์ ํ ๊ทธ ๋ค ์ธ์๋ก ํน์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฏธ๋ฆฌ ์ ๋ฌํด์ค ์ ์๋ค๋ // ํน์ฑ์ ํ์ฉํด์ event ๊ฐ์ฒด๊ฐ ์๋์ผ๋ก ์ ๋ฌ๋๋ ๊ฒ์ ๋ง๋ ๊ฒ์ด๋ค.
-
Quiz3) p128. ์์ 5-9. ํ์ดํ ํจ์๋ก ๋ณ๊ฒฝํด๋ณด๊ธฐ
var alertFruitBuilder = function (fruit) { return function () { alert('your choice is ' + fruit); }; }; --- const alertFruitBuilder = (fruit) => () => alert('your choice is ' + fruit);
public, private, protected ์ฐพ์๋ณด๊ธฐ
- ์ ๋ณด ์๋ = ์บก์ํ
๋ถ๋ถ์ ์ฉํจ์
-
์ด๋ค ํจ์์ ์ธ์๋ฅผ ํ๋ฒ์ ์ ๋ฌํ์ง ์๊ณ ๋๋ ์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ
-
์ฌ์ด ์์
function exampleOne() { console.log(arguments); } const a = exampleOne.bind(null, 1, 2, 3, 4, 5); // a๋ฅผ ํธ์ถํ๋ฉด ์ด๋ค ๊ฒฐ๊ณผ๊ฐ ๋์ฌ๊น์?
-
Quiz4) p134๊ด๋ จ) ์์
์ฌ์ด ์์
๋ฅผ ํ์ดํํจ์๋ก ํํํด์ฃผ์ธ์.const exampleOne = () => { console.log(arguments); } const a = exampleOne.bind(null, 1, 2, 3, 4, 5); // a๋ฅผ ํธ์ถํ๋ฉด ์ด๋ค ๊ฒฐ๊ณผ๊ฐ ๋์ฌ๊น์? // ์ ๊ทธ๋ฐ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ๊น์? // ์ด๋ป๊ฒ ์์๋ณผ ์ ์์๊น์?
-
๋๋ฐ์ด์ค
- ์งง์ ์๊ฐ ๋์ ๋์ผํ ์ด๋ฒคํธ๊ฐ ๋๋ฌด ๋ง์ด ๋ฐ์ํ ๊ฒฝ์ฐ, ์ด๋ฅผ ์ฒ์ ํน์ ๋ง์ง๋ง์ ๋ฐ์ํ ๊ฒ์ ๋ํด์๋ง ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ.
- ํด๋ก์ ๋ฅผ ํ์ฉํ์ฌ ๋๋ฐ์ด์ค๋ฅผ ๊ตฌํํ ์ ์๋ค!
- ๊ฐ๋ณ๊ฒ ์ดํดํ ๊ฒ ์ค๋ช ํด๋ณด๊ธฐ
์ปค๋งํจ์
- ์ฌ๋ฌ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋ ํจ์๋ฅผ ํ๋์ ์ธ์๋ง ๋ฐ๋ ํจ์๋ก ๋๋ ์ ์์ฐจ์ ์ผ๋ก ํธ์ถ ๋ ์ ์๊ฒ ์ฒด์ธ ํํ๋ก ๊ตฌ์ฑํ ๊ฒ
// ์ผ๋ฐ ํจ์
const func1 = (a, b, c, d, e) => a + b + c + d + e;
// ์ปค๋ง ํจ์
const func2 = a => b => c => d => e => a + b + c + d + e;
const sumFourParameter5 = func2(5);
const sumFourParameter8 = func2(8);
// ์ถํ ํ๋ผ๋ฏธํฐ 4๊ฐ๋ง ์ ๋ฌํด์ sumFourParameter ํจ์๋ค์ ์คํํ ์ ์๋ค.
// ์ฆ, ์ง๊ธ ์์ง ํ๋ผ๋ฏธํฐ๊ฐ 4๊ฐ ์ ๋ฌ๋์ด์ผ ํจ์๊ฐ ํธ์ถ ์๋ฃ๋๋ฏ๋ก, ํด๋ก์ ๊ฐ ํ์์ด ์ผ์ด๋๊ณ ์๋ ๊ฒ!