๊ธฐ๋ณธ๊ฐ ํจ์ ๋งค๊ฐ๋ณ์ (default function parameter)๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ด ์๊ฑฐ๋ undefined๊ฐ ์ ๋ฌ๋ ๊ฒฝ์ฐ ์ด๋ฆ๋ถ์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ด๊ธฐํํ ์ ์์ต๋๋ค. ๋ผ๊ณ MDN ๋๊ป์ ๋ง์ํ์ ๋ค.
function ์ด๋คํจ์(a,b=10){
console.log(a+b)}
์ด๋คํจ์(1) // 11
function ์ด๋คํจ์2(a,b=2*5){
console.log(a+b)} // ์ํ์ฐ์ฐ์ ๊ฐ๋ฅ
function ์ด๋คํจ์3(a,b=a*5){
console.log(a+b)} // ๋ค๋ฅธ ํ๋ผ๋ฏธํฐ์ ์ฐ์ฐ๋ ๊ฐ๋ฅ
์ด๋คํจ์(2) // 11
function ์์ํจ์(){
return 10}
function ์ด๋คํจ์4(a,b=์์ํจ์){
console.log(a+b)}
์ด๋คํจ์4(1) //11
ํจ์์ ๋ชจ๋ ํ๋ผ๋ฏธํฐ๋ค์ ์ ๋ถ ํ๊บผ๋ฒ์ ๋๋ ๋ฌถ์ด์ ์ธ์น๋ฉด์ ๋ค๋ฃจ๊ณ ์ถ์ ๊ฒฝ์ฐ(์ฐธ๊ณ ๋ก, ES5๋ฌธ๋ฒ์)
function ์์ฌ์์ดํจ์(a,b,c){
console.log(arguments)}
์์ฌ์์ดํจ์(1,2,3) // [1,2,3] ๋น์ค๋ฌด๋ฆฌํ ์๋ฃ๊ฐ ์ถ๋ ฅ๋จ
function ์์ฌ์์ดํจ์2(a,b,c){
for(let i=0;i<arguments.length;i++){
console.log(arguments[i])}
}
์์ฌ์์ดํจ์2(1,2,3) // 1 2 3
arguments์ ๋ค๋ฅด๊ฒ ES6์์ ๋์จ rest ํ๋ผ๋ฏธํฐ ๋ฌธ๋ฒ์ ์ชผ๊ฐ์ ๋ด๊ธฐ ๊ธฐ๋ฅ์ด ๊ฐ๋ฅํ๋ฉฐ, ํ๋ผ๋ฏธํฐ๊ฐ ๋ช ๊ฐ ๋ค์ด์ฌ์ง ๋ฏธ๋ฆฌ ์ง์ ํ ํ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ ํธ๋ฆฌํ๋ค. ํ๋ฒ ์์๋ณด์!
function ํธ๋ฆฌํํจ์(a,b,...rest){
console.log(rest) }
ํธ๋ฆฌํํจ์(1,2,3,4,5,6) // [3,4,5,6]
ํจ์์ ํ๋ผ๋ฏธํฐ์์ ...์ ๋ค์ด์จ ๋
์๋ค
์ ์ ๋ถ ๋ค ๋ฌถ์ด์ array์์ ๋ด์์ค
์ฃผ์์ฌํญ
...
์ 3๊ฐ ๋์ดํ๋ฉด ๋๋๋ฐ, ๊ดํธ์ ๊ฑฐํด์ฃผ๋ ์ฐ์ฐ์ ์ ๋๋ก ์๊ฐํ๋ฉด ๋๊ฒ๋ค.
const ์ธ์ฌ=['hi','there']
console.log(...์ธ์ฌ) //hi there
๊ทธ๋ผ ์ด๊ฒ์ ์ด๋๋ค ์ฐ๋ฉด ๋๋ ๊ฒ์ด๋~ํ๋ฉด,
// ํฉ์น๊ธฐ
const arr=[1,2,3]
const arr2=[4,5,5]
const arr3=[...arr,...arr2]
console.log(arr3) // [1,2,3,4,5,6]
//๋ณต์ฌ
const ๋ฐฐ์ด1=[1,2,3]
const ๋ฐฐ์ด2=๋ฐฐ์ด1
console.log(๋ฐฐ์ด2) //[1,2,3]
๋ฐฐ์ด1[3]=4
console.log(๋ฐฐ์ด1) //[1,2,3,4]
console.log(๋ฐฐ์ด2) //[1,2,3,4]
๋๋ ๋ฐฐ์ด2์ ์์ ์ ํด์ค ์ ์ด ์๋๋ฐ ์ [1,2,3,4]๊ฐ ๋๊ฒ์ธ๊ฐ?
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฑํธ๋ฅผ ์ด์ฉํด ๋ณต์ฌ๋ฅผ ํ๊ฒ ๋๋ฉด ๋ฐฐ์ด1์ด๋ ๋ฐฐ์ด2๊ฐ ์ฌ์ด์ข๊ฒ ํ๋์ฉ ๋ด ๊บผ, ๋๊บผ ์ด๋ ๊ฒ ๊ฐ๊ฐ ๋๋ ๊ฐ์ง ๊ฒ ์๋๋ผ ๊ทธ๋ฅ ํ๊ฐ์ ๊ฐ์ ๋์ด์
์ ๋ฉ๋ฆฌ์๋ถํฐ ๋ฏธ์ด์บฃ๋ง๋ฅ ์ง๊ทธ์ ๋ฐ๋ผ๋ณด๋
์ํฉ์ด ์ฐ์ถ๋๋ค.
= ๋ฅผ ์ฌ์ฉํด ๋ณต์ฌ๋ฅผ ํ๊ฒ ๋๋ฉด ' ์ ๊ธฐ์ ์๋ ๊ฑฐ๊ฐ ๋์ ๊ฐ์ด๋๋ค' ์ด๋ผ๊ณ ๊ทธ๋ฅ ํ์ดํ ํ๋ ๋์ ธ์ค๊ฑฐ๋ค. ๊ทธ๋ผ ๊ทธ๋ฅ ํ์ผ์์ด ๊ทธ ๊ฐ๋ง ๋ฐ๋ผ๋ณด๊ณ
์๋๊ฑฐ๊ตฌ. ...spread operator๋ฅผ ์ฌ์ฉํ๋ฉด ์ฐ๋ฆฌ๋ ๋ฏธ์ด์บฃ ๋๋น ๋์ ๊ฐ๊ฐ์ ๋ณ์์ ๊ฐ๊ฐ์ ๊ฐ์ ์ง์ง๋ก ์ค ์ ์๊ฒ ๋๋ค.
const ๋ฐฐ์ด1=[1,2,3]
const ๋ฐฐ์ด2=[...๋ฐฐ์ด1]
๋ฐฐ์ด1[3]=4
console.log(๋ฐฐ์ด1) //[1,2,3,4]
console.log(๋ฐฐ์ด2) //[1,2,3]
const ๊ฐ์ฒด1 = { a: 1, b: 2 };
const ๊ฐ์ฒด2 = { ...๊ฐ์ฒด1 };
console.log(๊ฐ์ฒด2);//{ a: 1, b: 2 }
//key ๊ฐ ์ค๋ณต๋ ๊ฒฝ์ฐ ๋์ค์ ๋ค์ด์จ ๊ฑธ๋ก ๊ฒฐ์ ๋๋ค
const ๊ฐ์ฒด1 = { a: 1, b: 2 };
const ๊ฐ์ฒด2 = { a: 4, ...๊ฐ์ฒด1 };
console.log(๊ฐ์ฒด2);//{ a: 1, b: 2 }
const ๊ฐ์ฒด1 = { a: 1, b: 2 };
const ๊ฐ์ฒด2 = {...๊ฐ์ฒด1, a: 4, };
console.log(๊ฐ์ฒด2);//{ a: 4, b: 2 }
์ฐธ๊ณ ๋ก spread operator๋ (ํจ์ ์๊ดํธ), {๊ฐ์ฒด ์ค๊ดํธ}, [๋ฐฐ์ด ๋๊ดํธ] ์์์๋ง ๋ณดํต ์ฌ์ฉํ๋ค!
์๋ ์ spread operator ์๊ธฐ๊ธฐ ์ ์๋ apply, call ์ด์ฉํ๋ค๋๋ฐ ์๋ ๋ฌธ๋ฒ์ด๊ธดํด๋ ๊ฐ์ฒด์งํฅ ๋ฐฐ์ธ ๋ ์ธ๋ชจ๊ฐ ์๋ค๊ณ ํ๋ ์ค๋ ํ์ตํ๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด์....ํ
const person={
์ธ์ฌ: function(){
console.log(this.name+'์๋
')
}
const person2={
name:'ํ๊ธธ๋'
}
person.์ธ์ฌ()
๋ฅผ person2์์๋ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด ์ด๋ป๊ฒ ํ ๊น?
person.์ธ์ฌ.apply(person2)
์ด๋ฐ ์์ผ๋ก ์์ฑํ๋ฉด ๋๋๋ฐ apply๋ฟ๋ง ์๋๋ผ .call()์ด๋ผ๋ ๊ฒ๋ ๋๊ฐ์ด ์์ฉํ๋ค. ๋ค๋ง, ํ๋ผ๋ฏธํฐ์ ๋ฃ๋ ๋ฐฉ์์์์ ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค.
.apply๋ [], call์ person.์ธ์ฌ().call(person2, 1,2)
์ฒ๋ผ ์์ฑํ๋ฉด ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๊ณต๋ถ ์ฌ๋ฏธ์์ง?
ํคํค