๐Ÿ€ ๊ธฐ์ˆ ์ฑ… ์Šคํ„ฐ๋””

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๊ฐœ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ์™„๋ฃŒ๋˜๋ฏ€๋กœ, ํด๋กœ์ €๊ฐ€ ํ˜„์ƒ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š” ๊ฒƒ!