function myFnV1(x){
return x + 100;
}
const result = myFnV1(10); // 110
const myFnV2 = function(){
return 100;
}
myFnV2(); // ์์ myFnV2์์ ๋ด์ฉ๋ฌผ์ด ํจ์๋ผ์ ํธ์ถ(myFnV2())ํ ์ ์๊ฒ ๋จ.
๐
myFnV1
: ๊ฐ์ด ์๋๋ผ ๋จ์ํ ํจ์ -> ๋ฌธ
(ํจ์ ์ ์๋ฌธ์๋ ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๋๋์ง ์์)
๐myFnV2
: ์ต๋ช ํจ์๋ก์ ํจ์๋ฅผ ๊ฐ์ผ๋ก ์ทจ๊ธํด์ ๋์ ๋ฌธ์ผ๋ก ๋ฑ์ฅ -> ์
(์์ ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๋๋จ)
: ํจ์๊ฐ ๋ง๋ค์ด์ง์๋ง์ ์ฆ์ ํ ๋ฒ ์คํํ๋ ํจ์
(function(){
console.log('์ฆ์ ์คํ ํจ์ ์คํ');
})();
๐ ์คํํ๋ ์๊ฐ ๊ฐ์ผ๋ก ์ทจ๊ธํด์ ๋ฐ๋ก ํธ์ถํ๊ณ ๋๋๋ฒ๋ฆผ.
๐ ๋ค์ ํธ์ถ ๋ถ๊ฐ๋ฅ. (์ด๋ฆ์ด ์๊ณ , ๋ณ์์ ๋ฃ์ง๋ ์์๊ธฐ ๋๋ฌธ)
๐ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ๋์ ๋จ ํ๋ฒ๋ง ์คํ!
function myFnV1(x){
return x + 100;
}
const result = myFnV1(10,20,30); // ์ธ์๊ฐ 1๊ฐ๊ฐ ์๋๋๋ผ๋ ํธ์ถ ์ฑ๊ณต. ์ธ์ ์์ด๋ ํธ์ถ ์ฑ๊ณต
์ธ์๊ฐ 1๊ฐ๊ฐ ์๋๋๋ผ๋ ํธ์ถ ์ฑ๊ณต. ์ธ์ ์์ด๋ ํธ์ถ ์ฑ๊ณต
=> ์ด ๋๋ฌธ์ ํจ์ ์
์ฅ์์๋ 2๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด์ผํจ.
1) ์ธ์์ ๊ฐ์ด ์ ๋ค์ด์ค๋ ์ํฉ ๋๋น
2) ์ธ์๋ฅผ ๋ ๋ง์ด ๋ฐ์์ ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ
=> ๊ฐ๋ณ ์ธ์
์ธ์๊ฐ ๊ฐ๋ณ์ ์ผ ๋๋ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ js๊ฐ ์ ๊ณตํด ์ค!
1) arguments
function sum(){
let s=0;
for(let i = 0; i < arguments.length; i++){
s +=arguments[i];
}
return s;
}
const abcSum1 = sum(10);
const abcSum2 = sum(10,20,30,40); // 10,20,30,40์ด arguments์ ๋ค ๋ค์ด๊ฐ. -> ๊ตณ์ด ํจ์ ์ธ์ ๋ฃ์ ํ์ x
๐ ๋ฌธ์ ์ :
sum
ํจ์ ๋ด๋ถ์ฝ๋๋ ๋ฐ๊นฅ์ชฝ์์ ๋ณด์ด์ง ์์.
ํจ์ ์ ์ด ๋์์ ๋,sum
ํจ์ ์ฌ์ฉํ ๋ ํจ์ ์๊ทธ๋์ฒ๋ฅผ ๋ณด๋ฉด ๊ฐ๋ณ์ธ์๋ฅผ ์ฒ๋ฆฌํ๋์ง, ๊ฐ๋ณ ์ธ์ ์ฒ๋ฆฌํ์ง ์๊ณ ์ธ์๋ฅผ ์๋ฌด๊ฒ๋ ๋ฐ์ง ์๋์ง๋ฅผ ์ ์ ์์ (์๋ ค๋ฉด ์ฝ๋ ์ด์ด๋ด์ผ ํจ. -> ํจ์ ์ฌ์ฉ์๋ค ๋งค์ฐ ๋ถํธ)
๐arguments
์ ์๋ฌต์ ์ผ๋ก ์๋๋๋ ๋ฉ์ปค๋์ฆ์ผ๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ ํจ์ ์๊ทธ๋์ฒ์ ๋ฑ์ฅ์ ์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์. (= ํํ๋ ฅ ์ ํ์ )
๐ ์ด๋ฌํ ๋งฅ๋ฝ์์ ์ถ๊ฐ๋ ์๋ก์ด ์คํ ์๋ค!
==>>> ์ ๊ฐ ํ๋ผ๋ฏธํฐ(rest parameter)!
2) args
function sum(...args){
let s=0;
for(let i = 0; i < args.length; i++){
s +=args[i];
}
return s;
}
const abcSum1 = sum(10);
const abcSum2 = sum(10,20,30,40);
๐
...
: ์ธ์๊ฐ ๋ช๊ฐ ์ฌ์ง ๋ชจ๋ฅด๊ฒ ๋ค ~ ๋ผ๊ณ ์๊ฐํ๊ธฐ~!
๐ ํจ์ ์ ์ด๋ณด๋ฉด, ํจ์ ์๊ทธ๋์ฒ์ ๋ช ํํ๊ฒ ๊ฐ๋ณ ์ธ์๋ฅผ ์ฒ๋ฆฌํ๋ ํจ์๋ผ๋ ์ ๋ณด๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ๋ฌ ํด์ค.
๐ ๋ช ์์ ! ํํ๋ ฅ ๐!
+ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ
function sum(a,b...args){
let s=0;
for(let i = 0; i < args.length; i++){
s +=args[i];
}
return s;
}
const abcSum1 = sum(10,20,30,40);
๐ ๊ธฐ์กด์
arguments
๋ ์ธ์ ๊ธฐ์ ๊ณผ ์๊ด์์ด ๋ชจ๋ ์ธ์์ ๊ฐ ๋ค ๋ด๊ฒจ์์.
๐ but! ์ ๊ฐ ํ๋ผ๋ฏธํฐ๋ ์ค์ ๋กa
์b
์10
,20
์ด ๋ค์ด๊ฐ๊ณ ๋๋จธ์ง30
,40
๋ง ๋ค์ด์๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๋ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ์ข์!
๐function sum(a,b...args)
๋ฅผ ์ ์ด์ ๋ณด๋ฉด ํจ์์๊ทธ๋์ฒ๋ a,b๋ ํ์๊ฐ์ด๊ณ ๊ทธ ๋ค๋ ๋ ์ค๋๋๊ณ ์์ค๋ ๋๋ค๋ ์ ๋ณด๋ฅผ ์ฃผ๊ฒ ๋จ.
: ( )ํธ์ถ, call, apply
function myFnV1(x){
return x + 100;
}
const result = myFnV1(10);
const myFnV2 = function(){
return 100;
}
myFnV2(); // ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ
myFnV2.call(); // ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ
myFnV2.apply(); // ์ธ ๋ฒ์งธ ๋ฐฉ๋ฒ
๐
call
,apply
๋ฉ์๋ ์ด์ฉํ ํจ์ ํธ์ถ
: ๊ธฐ์กด์ ๊ดํธ ํตํด์ ํธ์ถํ๋ ๋ฌธ๋ฒ๊ณผ ํจ์๊ฐ ํธ์ถ๋๋ค๋๊ฑด ์์ ํ ๋์ผ.
function sum(a,b...args){
let s=0;
for(let i = 0; i < args.length; i++){
s +=args[i];
}
return s;
}
sum.call(context,10,20,30);
sum.apply(context,[10,20,30]);
๐
call
,apply
์
๊ณตํต์ : ์ฒซ ๋ฒ์งธ ์ธ์๋ก context ๊ฐ์ฒด๋ผ๋ ๊ฒ์ ๋ฐ์.
์ฐจ์ด์ :call
์ ์ธ์๋ฅผ ์ ๋ฌ,apply
๋ ์ธ์๋ฅผ ๋ฐฐ์ด์ ๋ด์์ ์ ๋ฌ.
๐call
์ ์ธ์๋ฅผ ์ ๋ฌํ ๊ฒ์ ์ฝ๋๋ก ์ฐ๊ณ ์์.
40
๋ ์ ๋ฌํด์ผํ๋ค๋ฉด,
sum.call(context,10,20,30);
->sum.call(context,10,20,30,40);
์ฝ๋ ์์ฒด๋ฅผ ๋ฐ๊ฟ์ผ ํจ.
function sum(a,b...args){
let s=0;
for(let i = 0; i < args.length; i++){
s +=args[i];
}
return s;
}
const arr = [10,20,30];
sum.apply(context,arr);
๐
apply
๋ ๋ฐฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ์ชฝ์ผ๋ก ๋บ ์ ์์.
๋ฐ๊นฅ์ชฝ์์ ์ธ์๋ฅผ ๋ ์ฃผ๊ณ ์ถ์ผ๋ฉด ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ๋จ!
๐ ํจ์์ ํธ์ถ์ ์ธ์ ๊ฐ์ ์ธ๋ถ๋ก๋ถํฐ ๊ณต๊ธ๋ฐ์์ ํจ์ฌ ๋ ์ ์ฐํ ๋ฌด์ธ๊ฐ๋ฅผ ํ๊ฒ ๋ ๋ ๊ทธ๊ฒ ๊ฐ๋ฅํ๊ฒ ํธ์ถ๋๋ ๋ฉ์ปค๋์ฆ.
์์ sum ํจ์๋ฅผ ํ์ดํ ํจ์๋ก ๋ณํํด๋ณด์!
const sum01 = (a,b...args)=>{
let s=0;
for(let i = 0; i < args.length; i++){
s +=args[i];
}
return s;
}
// ๋์ผํ ten ํจ์๋ก ์์!
// ์ต์ํ์ ์ฝ๋๋ก ๋ arrow function
const ten=() => 100; // ํธ์ถ๋๋ ์ฆ์ 100 ๋ฐํ
// ์ด๋ ๊ฒ ์์ฑํด๋ ๋์ง๋ง, ์๋ตํ๋ฉด ํจ์ฌ ๊ฐ๋จํด์ง๋๊น ์๋ตํ๋๊ฒ ์ข์!
const ten =()=>{
return 100;
}
const ten=(x) => 100 + x;
// ์ธ์ 1๊ฐ๋ฉด ๊ดํธ ์๋ต๊ฐ๋ฅ.
const ten= x => 100 + x;
function
๊ณผ ํจ์ ์ด๋ฆ ์ฌ์ด์ *
(asterisk)๊ฐ ๋ถ์.function* gen(){
yield 10; // yield : return๊ณผ ์ ์ฌ. generator ๋ง์ return.
yield 20;
return 30;
}
const g = gen(); // g์ generator๋ฅผ ์ ์ดํ ๊ฐ์ฒด๊ฐ ๋ฐํ๋จ. ๊ฐ์ฒด์๋ next๋ผ๊ณ ํ๋ ๋ฉ์๋๊ฐ ๋ค์ด๊ฐ ์์.
g.next(); // ํธ์ถ (g์์ ์ ๊ณตํ๋ nextํจ์ ํธ์ถ)
g.next();
g.next();
๐ ์ผ๋ฐํจ์์ ๋ฌ๋ฆฌ generator function์ ํธ์ถ์ ํ๋ฒ ํ๊ณ ์ฌ๋ฌ ๋ฒ ํธ์ถ์ ํด์ ๊ทธ ํจ์๊ฐ ์ข ๋ฃ๋์ง ์์๋๋ฐ ๊ทธ ํจ์์ ๋ค์ ๋ค์ด๊ฐ๋ค๊ฐ ๋ค์ ๋์ค๊ณ ๋ ๋ค์๋ค์ด๊ฐ๋ค๊ฐ ๋ค์ ๋์ค๊ณ ... ์ด๋ฐ์์ ๋์์ ํ ์ ์์.
๐ generatorํจ์๋ ์คํ์ ์ผ์ ์ค์ง์ํค๊ณ ๋ฐ๊นฅ์ชฝ์ผ๋ก ๋๊ฐ๋ค๊ฐ ๋ค์next
ํจ์์ ํธ์ถ๋ก ์์ชฝ์ผ๋ก ๋ค์ด์์ ์คํ์ ์ฌ๊ฐ์ํฌ ์ ์๋ ํจ์.
๐ ์ผ๋ฐ ํจ์์ ๋ฌ๋ฆฌ ํจ์์ ๋ฐ๊นฅ์ชฝ ์ฆ, ํจ์์ ์ฌ์ฉ์์ ํํ!ํ๋ฏ์ด ์ปค๋ฎค๋์ผ์ด์ ํ ์ ์๋ ์คํ์ ๊ฐ๊ณ ์๋ ํน์ํ ํจ์.
function
์์ async
๋ผ๊ณ ํ๋ ์ง์์ด ๋ถ์ฌ ์ฃผ๊ธฐ.async function myTask(){
}
๐ ๋น๋๊ธฐ ์์ ์ ์ฝ๋๋ก ๊ตฌ์ฑํ ๋,
Promise
๋ผ๋ ์คํ์ ์ฌ์ฉํจ.
๐Promise
์ ์ด๋ ค์ด ๋น๋๊ธฐ ์ฝ๋ ๊ตฌ์ฑ์ ๋๊ธฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋ง๋ค์ด์ฃผ๋ ์คํ.