변수에 따른 scope
if(true){
var x = 3;
}
console.log(x); // 3
if(true){
const y = 3;
}
console.log(y); // Uncaught ReferenceError : y is not defined
=> 위 결과가 다른 이유 :
var 같은 경우 함수 스코프를 가지므로 if 블럭 관계 없이 접근 가능
const, let 같은 경우 블록 스코프를 가지므로 블록 내부에서만 접근 가능
var relationship1 = {
name : 'zero',
friends : ['nero','hero','xero'],
logFriends : function(){
var that = this;
this.friends.forEach(function(friend){
console.log(that.name, friend);
});
},
};
relationship1.logFriends();
// function을 사용하는 경우 함수 내부의 this의 범위가 달라진다.
const relationship2 = {
name : 'zero',
friends : ['nero', 'hero', 'xero'],
logFriends2(){
this.friends.forEach(friend => {
console.log(this.name, friend)
});
},
};
relationship2.logFriends2();
// 화살표 함수를 사용하는 경우에는 this의 범위는 동일하다.
=> 위 차이점 때문에 아직까지도 function 키워드가 쓰이고 있다.
const promise1 = Promise.resolve('성공1');
const promise2 = Promise.resolve('성공2');
Promise.all([promise1, promise2])
.then((result) =>{
console.log(result); //['성공1', '성공2']
})
.then((error)=>{
console.error(error);
})
const promise1 = Promise.resolve('성공1');
const promise2 = Promise.reject('실패2');
const promise3 = Promise.resolve('성공3');
Promise.allSettled([promise1, promise2])
.then((result) =>{
console.log(result); //['성공1', '성공2', '성공3']
})
/*
{status : 'fulfilled', value : '성공1'},
{status : 'rejected', reason : '실패2'},
{status : 'fulfilled', value : '성공3'}
*/
.then((error)=>{
console.error(error);
})
try{
Promise.reject('에러');
} catch(e){
console.error(e); // 오류 발생 (UnhandledProiseRejection)
}
//#############
Promise.reject('에러').catch(()=>{
// 에러 발생 안함
});