동기 방식은 여러 작업을 순서대로 하나씩 처리하는 방식이다.
console.log('one');
console.log('two');
console.log('three');
실행 결과
one
two
three
예를 들어:
비동기 방식은 어떤 작업이 끝날 때까지 기다리지 않고 다음 코드를 먼저 실행하는 방식이다.
웹에서는 주로
에서 사용된다.
console.log('one');
setTimeout(() => {
console.log('two'); // 5초 뒤 실행
}, 5000);
console.log('three');
실행 결과
one
three
two
setTimeout은 비동기 작업이다.
5초를 기다리는 동안 아래 코드가 먼저 실행된다.
function hello(callback) {
setTimeout(() => {
console.log("작업 완료");
callback();
}, 2000);
}
hello(function() {
console.log("다음 작업 실행");
});
단점: 콜백 지옥(callback hell) 발생 가능
비동기 작업의 성공/실패를 처리하기 위한 객체
let promise = new Promise(function(resolve, reject) {
setTimeout(() => {
resolve("성공");
}, 2000);
});
promise.then(function(result) {
console.log(result);
});
Promise를 더 쉽게 사용하기 위한 문법
async function test() {
let result = await new Promise(function(resolve) {
setTimeout(() => {
resolve("완료");
}, 2000);
});
console.log(result);
}
test();
Spread 문법은 ... 을 사용하여
등에 사용된다.
let arr1 = [1, 2, 3];
let arr2 = [...arr1];
console.log(arr2);
기존 배열을 변경하지 않고 새로운 배열 생성
let a = [1, 2];
let b = [3, 4];
let result = [...a, ...b];
console.log(result);
let user = { name: "길동", age: 30 };
let newUser = { ...user };
let info = { grade: "silver" };
let merged = { ...user, ...info };
function sum(a, b, c) {
return a + b + c;
}
let numbers = [1, 2, 3];
console.log(sum(...numbers));










스프레드 연산자는 얕은 복사로, 객체의 참조값(주소값)을 복사하기 때문에 원본 데이테 값은 바뀌지 않는다.

spread 구문은 iterable구조이다. 반복가능한 구조라는 의미이다. 배열, 객체 그리고 문자열 등이 iterable구조에 해당한다.

