Arrow Function & this | IIFE | Default Parameter
- -
๋ชจ๋ ํฌ์คํ ์ ์ธํ๋ฐ ECMAScript6: ๋น ๋ฅด๊ฒ ๋ฐฐ์ฐ๋ ES6 ์คํฌ๊ณผ ๋น๋๊ธฐ ํ๋ก๊ทธ๋จ ์ ๋ด์ฉ์ ๋ด๊ณ ์์ผ๋ฉฐ
์ถ์ฒ๋ ์๋์ ์ฃผ์๋ก "๊นํํ"๋์ ์๋ฃ์ ๋๋ค.
์์ ์ ์ธ ์๋๊ฐ ์๋ ๊ณต๋ถํ ๊ฒ์ ์ ๋ฆฌํด๋๋ ๋ชฉ์ ์ผ๋ก ํฌ์คํ ํ ๊ฒ์ ๋๋ค.
www.inflearn.com/course/es6-ecmascript-6
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์ผ ๋ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
'Languages > Java Script' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Rest Parameter | Map | Maplterator | Filtering & Set | Set (0) | 2021.02.15 |
---|---|
Iterator & for-of | Symbol | [Symbol.iterator()] (0) | 2021.02.15 |
Template Literals | Destructuring | class (0) | 2021.02.15 |
ECMAScript6 | ES6 | let & const | Block-scope | Temprol Dead Zone (0) | 2021.02.15 |
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค