์ƒˆ์†Œ์‹

Languages/Java Script

Arrow Function & this | IIFE | Default Parameter

  • -
๋ฐ˜์‘ํ˜•

๋ชจ๋“  ํฌ์ŠคํŒ…์€ ์ธํ”„๋Ÿฐ ECMAScript6: ๋น ๋ฅด๊ฒŒ ๋ฐฐ์šฐ๋Š” ES6 ์Šคํ‚ฌ๊ณผ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋žจ ์˜ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ

์ถœ์ฒ˜๋Š” ์•„๋ž˜์˜ ์ฃผ์†Œ๋กœ "๊น€ํ˜•ํƒœ"๋‹˜์˜ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค. 

์ƒ์—…์ ์ธ ์˜๋„๊ฐ€ ์•„๋‹Œ ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•ด๋†“๋Š” ๋ชฉ์ ์œผ๋กœ ํฌ์ŠคํŒ… ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

www.inflearn.com/course/es6-ecmascript-6

 

ECMAScript 6: ๋น ๋ฅด๊ฒŒ ๋ฐฐ์šฐ๋Š” ES6 ์Šคํ‚ฌ๊ณผ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ์ธํ”„๋Ÿฐ

๋น„๋™๊ธฐ ํ™˜๊ฒฝ์—์„œ ์‰ฝ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ES6์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์Šคํ‚ฌ์„ ํ–ฅ์ƒ์‹œ์ผœ ๋ณด์„ธ์š”. ์ดˆ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ES6 ์˜จ๋ผ์ธ ๊ฐ•์˜ abcdefghijk

www.inflearn.com


1. Arrow Function

# ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

์ต๋ช… ํ•จ์ˆ˜๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํ™”์‚ดํ‘œ ํ‘œํ˜„์‹

 

์ต๋ช…ํ•จ์ˆ˜๋ž€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

function () { 

}

์œ„์™€ ๊ฐ™์ด functionํ‚ค์›Œ๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ

() => {
}

์†Œ๊ด„ํ˜ธ์™€ ํ™”์‚ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ด๋ ‡๊ฒŒ functionํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•œ ์ฑ„๋กœ ์„ ์–ธํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
์ฆ‰ function์ด ์‚ฌ๋ผ์ง€๊ณ  => ํ™”์‚ดํ‘œ๊ฐ€ ์ƒ๊ฒผ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋” ์ถ•์•ฝ๋˜๋ฉฐ ํ‘œํ˜„๋ ฅ์ด ๋” ์ข‹์•„์กŒ๋‹ค.

<script>
 const MyFunction = () => {
     console.log("ES6 arrow function");
 };
 MyFunction();
</script>

ํ•จ์ˆ˜์— ํฌํ•จ๋œ ์‹คํ–‰๋ฌธ์ด ํ•˜๋‚˜๋ผ๋ฉด ์ค‘๊ด„ํ˜ธ๋„ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

# ํ•จ์ˆ˜ ์‹คํ–‰์—์„œ์˜ this

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ์‰ฝ๊ฒŒ ์ปจํ…์ŠคํŠธ ํ™œ์šฉ

<script> 
     var name ="ES5";
 
     function Lang(){
         this.name = "ES6";
 
         setTimeout(function(){
                 console.log("Global name is " + this.name);
                },100);
        setTimeout(()=>{
                console.log("My name is " + this.name);
                },100);
    }
    var lang = new Lang();
</script>
                         

์—ฌ๊ธฐ์„œ function ํ•จ์ˆ˜ ๋‚ด์—  this๋Š” window.name์— "ES5"์— ์ ‘๊ทผํ•˜์—ฌ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

ES5์—์„œ๋Š” call(), apply()ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด this๋ฅผ ์ง€์ •ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณค ํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ํ•จ์ˆ˜์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๋Œ€๋กœ ๋ชจ๋ฅธ๋‹ค๋ฉด ์‹ค์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ™”์‚ดํ‘œ ํ‘œํ˜„์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

 

ํ™”์‚ดํ‘œ ํ‘œํ˜„์‹ ํ•จ์ˆ˜์•ˆ์˜ this.name์€ ๊ธฐ์กด๊ณผ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€๋ฅดํ‚จ๋‹ค.

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ํ‘œํ˜„ ๋ฐฉ๋ฒ•๋งŒ ๋‹ฌ๋ผ์ง„ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ this๋„ ๋‹ค๋ฅด๋ฏ€๋กœ ๊ธฐ์กด๊ณผ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰ ES6๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

2. IIFE

 

# ์ฆ‰์‹œ ์‹คํ–‰ํ•จ์ˆ˜(lmmediately-invoked function expression)

์ต๋ช… function์€ ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋„ ์ž์ฃผ ์žˆ๋‹ค.

 

<script> 
(function(lang){
 console.log(lang);
 }("ES5"));
 //----------------๊ตฌ๋ถ„์„ 
((lang)=>{
 console.log(lang);
  })("ES6"); 
 </script>

์œ„์˜ ์˜ˆ์‹œ๋Š” functionํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋งŒ๋“  ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜์ด๋‹ค.

 

์ด๊ฒƒ์„ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๋ฐ”๊พธ๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜์˜ ์•ž์˜ ๊ด„ํ˜ธ ๋‚ด๋ถ€๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด๋กœ ๋ฐ”๋€” ํ‘œํ˜„์‹์ด๊ณ  ๋’ค์˜ ๊ด„ํ˜ธ ๋‚ด๋ถ€๋Š” ํ•จ์ˆ˜์— ์ „๋‹ฌ๋  ์ธ์ž๋“ค์ด๋‹ค.

 

์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋Š” ํ•œ๋ฒˆ์˜ ์‹คํ–‰๋งŒ ํ•„์š”๋กœ ํ•˜๋Š” ์ดˆ๊ธฐํ™” ์ฝ”๋“œ ๋ถ€๋ถ„์— ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์—์„œ functionํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋–„์™€ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์ ์€ ํ™”์‚ดํ‘œ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ด„ํ˜ธ๋กœ ๋จผ์ € ๋ฌถ๊ณ  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

#ES5 vs ES6

 

# ์ •๋ฆฌํ•˜๊ธฐ

- ES6์—์„œ๋Š” ์ต๋ช…ํ•จ์ˆ˜์—์„œ functionํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•˜๊ณ  ๊ด„ํ˜ธ์™€ ํ™”์‚ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

- ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ์‹คํ–‰๋  ๋•Œ ๊ธฐ์กด์˜ ์ต๋ช… ํ•จ์ˆ˜๋Š” ๊ธ€๋กœ๋ฒŒ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผํ•˜์˜€์œผ๋‚˜, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•œ ๋‹น์‹œ์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

- ์ฆ‰์‹œ ์‹คํ–‰ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ด„ํ˜ธ๋ฅผ ๋จผ์ € ๋ฌถ๊ณ  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

 

 

3. Default Parameter

 

# ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜

ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ธฐ๋ณธ ๊ฐ’์ด undefined์ด๋‹ค.

์ธ์ž๊ฐ€ ๋„˜์–ด์˜ค์ง€ ์•Š์„ ๋•Œ์˜ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

 

๊ธฐ์กด์˜ ๋ฐฉ์‹๊ณผ ES6์˜ ๋ฐฉ์‹์„ ์‚ดํŽด๋ณด์ž.

<script>
function animal(name){
	
    var name = name || "dog";
    console.log(name);
}
animal();
animal(null);
animal(false);
</script>

๋จผ์ € ์œ„๋Š” ๊ธฐ์กด์˜ ๋ฐฉ์‹์ด๋‹ค. ES6์—์„œ๋Š” ์ธ์ž๊ฐ€ ๋„˜์–ด์˜ค์ง€ ์•Š์„ ๋•Œ์˜ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์‹œ๋Š” ES6๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ง  ๊ฒƒ์ด๋‹ค.

 <script>
 const defaultColor = "red";
 function defaultValue(value, color = defaultColor, myArray =[]){
     myArray.push(value,color);
     return console.log(myArray);
 }
 defaultValue("strawberry");
 defaultValue("apple",undefined);
 defaultValue("banana","yellow");
 </script>

3๋ฒˆ์งธ ์ค„์— function defaultValue ๋ถ€๋ถ„์„ ๋ณด๋ฉด color ์™€ myArray์— ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•ด ์ฃผ์—ˆ๋‹ค.

 

ํ˜ธ์ถœ์„ ํ•  ๋•Œ, ์ฒซ๋ฒˆ์งธ๋กœ ํ˜ธ์ถœ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋‘๋ฒˆ์งธ ์ธ์ž๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์•„์„œ ์ž๋™์œผ๋กœ undefined๊ฐ€ ๋“ค์–ด๊ฐ”๊ณ ,

๋‘๋ฒˆ์งธ ํ˜ธ์ถœ ๋ถ€๋ถ„์€ undefined๋กœ ์ ์–ด๋†“๋”๋ผ๋„ ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ƒ‰์ƒ์ด ์„ค์ • ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ ์ฃผ์˜ ํ•ด์•ผํ•  ์ ์€, ๊ธฐ์กด์˜ ๋ฐฉ๋ฒ•์€ undefined ๋ฟ ์•„๋‹ˆ๋ผ null, false, 0, ๊ณต๋ฐฑ์— ๋Œ€ํ•ด์„œ๋„ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๋ฐ˜๋ฉด

ES6์˜ ๊ฒฝ์šฐ default parameter๋Š” undefined์ผ ๋•Œ๋งŒ ์ ์šฉ์ด ๋˜๋‹ˆ ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค.

 

# ์ •๋ฆฌํ•˜๊ธฐ

ํ•จ์ˆ˜ ์„ ์–ธ์‹œ ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ธ์ž๊ฐ€ undefined์ผ ๋•Œ ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.