์ผ๋ฐ์ ์ธ ํจ์์์ ๋์ฑ ๊ฐ๋จํ๊ฒ ํํ ๊ฐ๋ฅํ ํจ์ ํํ์
// ๊ธฐ๋ณธ ํจ์
function test(num1, num2) {
return num1+num2;
};
// ๋๋ค ํจ์
(num1, num2) => num1+num2;
map ๋ด๋ถ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ฐฐ์ด์ ๊ฐ ์์๋ค์ ํ๋ฒ์ฉ ์ฐธ์กฐ ๋ฐ ๋ฐ๋ณต ํธ์ถํ๊ณ ๋ก์ง์ ์ํํ ๊ฒฐ๊ณผ ๊ฐ๋ค์ ์๋ก์ด ๋ฐฐ์ด ํํ๋ก ๋ฐํํ๋ ํจ์
let names = ['a1', 'a2', 'a3'];
const result = names.map((value) => console.log(value));
// ์์ ๊ฒฐ๊ณผ๋ก 'a1', 'a2', 'a3' ์์๋ค์ด ํ๋ฒ์ฉ ์ฝ์์ ์ถ๋ ฅ๋๋ค.
1. ๊ธฐ์กด์ ์๋ ๋ฐฐ์ด์์ ํน์ ๊ฐ๋ค๋ง ํํฐ๋งํ์ฌ ๋ฐฐ์ด ํํ๋ก ๋ฐํ
2. true๊ฐ ๋ฐํ๋ index์ value ๋ง์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด ๋ฐํ
let nums = [1, 2, 3, 4, 5];
let result1 = nums.filter((value) => {
let isEven = value%2 == 0;
return isEven;
});
// ๊ฒฐ๊ณผ => [2, 4]
๋ฐฐ์ด์์ find ํจ์ ๋ด๋ถ ๋ก์ง์ ๋ง์กฑํ๋ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๋ฐํ
let result2 = nums.find((value) => value%2==0);
// ๊ฒฐ๊ณผ => 2
ํน์ ์ค๋ธ์ ํธ ๋ด๋ถ์ ๋ณ์๋ช ์ผ๋ก ์๋ก์ด ๊ฐ์ฒด์์ ์ ์ธ ํ ํน์ ๊ฐ์ฒด๋ฅผ ๋์ ํ ๊ฒฝ์ฐ, ํด๋น ๋ณ์๋ช ๊ณผ ์ผ์นํ๋ ๋ณ์์ ๊ฐ์ด ์ ์ฅ๋๋ค.
let mem = {num: 1, name: 'a', addr: 'a1'};
let {num, name} = mem;
// num = mem.num;
// name = mem.name;
์ผ๋ฐ ๋ณ์๋ ๋ฐฐ์ด๊ณผ ๊ฐ์ด ์ค๋ธ์ ํธ๋ ํจ์์ ํ๋ผ๋ฏธํฐ ๊ฐ์ผ๋ก ์ ๋ฌํ ์ ์๋ค.
let useMem = ({num, name}) => {
console.log(`${num} | ${name}`);
};
useMem({num: 1, name: 'a'});
// ๊ฒฐ๊ณผ => 1 | a
ํจ์ ์ธ์ ์ ๋ฌ ๊ฐ์์ ์๊ด ์์ด ๊ฐ์๋งํผ ๋ฐฐ์ด์ ์ง์ด ๋ฃ์ด ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๋ค.
function useFunc(...args) {
console.log(args);
};
useFunc(1, 2, 3);
// ๊ฒฐ๊ณผ => args = [1, 2, 3]
useFunc(1, 2, 'a');
// ๊ฒฐ๊ณผ => args = [1, 2, 'a']
for ๋ฌธ : ์ผ๋ฐ์ ์ธ for ๋ฌธ
for in ๋ฌธ : ๋ฐ๋ณต ์กฐ๊ฑด ์ ์ธ ์คํต ๊ฐ๋ฅ
forEach ๋ฌธ : ๋ด๋ถ ์ฝ๋ฐฑ ํจ์๋ก ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ํจ์
for of ๋ฌธ : ์ธ๋ฑ์ค๊ฐ ์๋ value ๊ฐ์ ๊ฐ์ ธ์ด
let names=['a1', 'a2', 'a3'];
for(let i=0; i<names.length; i++) {
console.log(names[i]);
}
for(let i in names) {
console.log(names[i]);
}
names.forEach((value) => {
console.log(value);
});
for(let value of names) {
console.log(value);
}
- ์๊ฐ์ ์ง์ฐ์ํจ ํ ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํ๋ ํจ์
- ๋น๋๊ธฐ ํ๊ฒฝ์ผ๋ก ์์ ํ๋ค.
์ฒซ ๋ฒ์งธ ์ธ์ : ์ฝ๋ฐฑ ํจ์
๋ ๋ฒ์งธ ์ธ์ : ์ง์ฐ ์๊ฐ
setTimeout(() => {
console.log('aa');
}, 5000);
// ๊ฒฐ๊ณผ => 5์ด ์ดํ์ 'aa'
1. ์ฝ๋ฐฑ ํจ์ ๋ด๋ถ์ ๋ค๋ฅธ ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ ๋๋ง๋ค depth์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ค.
2. ์คํ์ด ๋๋์ง ์์ ์ฝ๋ฐฑ ํจ์๋ ์คํ ์์ญ์ ๊ณ์ ์กด์ฌํด ๋ฆฌ์์ค ๋ถํ๊ฐ ์ปค์ง๋ค.promise๋ก ํด๊ฒฐ ๊ฐ๋ฅ
๐ก ๋น๋๊ธฐ ์์ ์ ์์์ ์ผ๋ก ์์ฐจ ์คํํ๊ธฐ ์ํ ์์ (๋๊ธฐ ์์ X)
// callback ํจ์
function order(menu, callback) {
const delay = Math.floor(Math.random() * 5000 + 5000);
setTimeout(() => {
console.log(`${menu}๊ฐ ์ค๋น๋์์ต๋๋ค.`);
callback(menu);
}, delay);
}
order('๋ฐํฌํฐ', (menu) => {
order('์๋์์น', (menu) => {
order('์์ด์คํฌ๋ฆผ', (menu) => {
});
});
});
๋น๋๊ธฐ ์์ ์ ์์์ ์ผ๋ก ์์ฐจ ์คํ์ํค๊ธฐ ์ํ ๊ฐ์ฒด์ด๋ฉฐ ์๋ฌ ์ฒ๋ฆฌ์ ์ ์ฉํ๋ค.
- Promise ๊ฐ์ฒด ์ฌ์ฉ ๋ฐฉ๋ฒ
1. ํจ์ ๋ด๋ถ์ Promise ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
2. Promise ๊ฐ์ฒด๋ (resolve, reject)๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ค.
3. Promise ๊ฐ์ฒด ํจ์ ๋ด๋ถ์ ๋น๋๊ธฐ ํ๊ฒฝ์ ๋ง๋ค๊ธฐ ์ํด setTimeout() ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
4. ์์ ์ด ์๋ฃ๋๋ฉด resolve๋ฅผ ํตํด ์๋ฃ ์ํ๋ฅผ ๋ฐํํ๋ค.
4-1. ์์ ์ด ์คํจํ๋ฉด reject๋ฅผ ํตํด ์คํจ ์ํ๋ฅผ ๋ฐํํ๋ค.
5. ํจ์ ํธ์ถ ์ดํ then API๋ฅผ ํตํด resolve Promise ๊ฐ์ฒด๋ฅผ ๋ฐ๋๋ค.
5-1. ์์ ์คํจ ์, catch API๋ฅผ ํตํด reject Promise ๊ฐ์ฒด๋ฅผ ๋ฐ๋๋ค.
6. then/catch API์์๋ ํจ์๋ฅผ ๋ฑ๋กํด ํน์ ๊ฐ์ด๋ ์ฝ๋ฐฑ ํจ์๋ฅผ return ํ๋ค.
// Promise ๊ฐ์ฒด
function orderPromise(menu) {
return new Promise((resolve, reject) => {
const delay = Math.floor(Math.random() * 5000 + 5000);
let status = Math.floor(Math.random() * 2);
setTimeout(() => {
console.log(`${menu}๊ฐ ์ค๋น๋์์ต๋๋ค.`);
if(status == 0) return reject(menu);
resolve();
}, delay);
});
}
// reject๋ฅผ ์ํ Promise ๊ฐ์ฒด
function reOrder(menu) {
return new Promise((resolve, reject) => {
const delay = Math.floor(Math.random() * 5000 + 5000);
setTimeout(() => {
console.log(`${menu}๊ฐ ๋ค์ ์ค๋น๋์์ต๋๋ค.`);
resolve();
}, delay);
});
}
// Promise ๊ฐ์ฒด ์คํ
orderPromise('๋ฐํฌํฐ')
.catch(function(menu) {console.log(`${menu}๊ฐ ์์ง๋์์ต๋๋ค.`); return reOrder(menu);})
.then(function() {return orderPromise('์๋์์น');})
.catch(function(menu) {console.log(`${menu}๊ฐ ์์ง๋์์ต๋๋ค.`); return reOrder(menu);})
.then(function() {return orderPromise('์์ด์คํฌ๋ฆผ');})
.catch(function(menu) {console.log(`${menu}๊ฐ ์์ง๋์์ต๋๋ค.`); return reOrder(menu);})
.then(function() {console.log('์ข
๋ฃ');});
- JSON ํ์ผ์ ๋ถ๋ฌ์ Promise ๊ฐ์ฒด๋ก ๋ฐํํ๋ค.
- ํ์ด์ง ๋ก๋ฉ ์์ ์ด๋ ํน์ ์์ ์ JSON ํ์ผ์ ์ฝ์ด ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์จ๋ค.
1. ์ฒซ๋ฒ์งธ then์ ํตํด response ๊ฐ์ฒด์ .json() ํจ์๋ฅผ return ํ๋ค.
2. ๋๋ฒ์งธ then์ ํตํด data๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํ๋ค.์ค์ ์๋ฒ ํ๊ฒฝ์์ ๊ตฌ๋ ๊ฐ๋ฅํ๋ค!
fetch("friends.json")
.then(function(res) {return res.json();})
// res.json() : Promise ๊ฐ์ฒด
.then((data) => {
data.forEach((value, index) => {
let li = document.createElement('li');
li.innerText = value;
document.querySelector('#friendList').append(li);
});
});