당장 이해가 되지 않더라도, 꾸준하게 하루에 볼 분량들을 읽고 익숙해지다보면 언젠가는 이해가 확 되는 날이 오겠지..!
시간이 많이 모자라지만 그래도 성실하고 꾸준하게 해보자.
Error
라는 일관된 인터페이스로 제공<script>
console.log('[start]');
try{
foo();
} catch (error) {
console.log('[에러발생]', error);
// [에러발생] ReferenceError : foo is not defined
}
console.log('[End]')
// 발생한 에러에 적절한 대응을 하면 프로그램이 강제종료되지 않음.
</script>
<script>
try {
//실행할 코드 (에러 발생 가능성이 있는 코드)
} catch (err){
// try 코드 블럭에서 에러가 발생하면 이 코드 블럭의 코드가 실행된다.
// err에는 Try 코드 블럭에서 에러가 발생한 Error 객체가 전달됨
} finally{
// 에러 발생과 상관없이 반드시 한 번 실행됨.
}
</script>
생성자 함수 | 인스턴스 |
---|---|
Error | 일반적 에러 객체 |
SyntaxError | 자바스크립트 문법에 맞지 않는 문을 해석할 때 발생하는 에러 객체 |
Reference Error | 참조할 수 없는 식별자를 참조했을 때 발생하는 에러 객체 |
TypeError | 피연산자 또는 인수의 데이터타입이 유효하지 않을 때 발생하는 에러 객체 ex) null[0] |
RangeError | 숫자값의 허용 범위를 벗어났을 때 발생하는 에러 객체 |
URIError | EncodeURI 또는 decodeURI함수에 부적절한 인수를 전달했을 때 발생하는 에러 객체 |
EvalError | eval 함수에서 발생하는 에러 객체 |
throw 표현식;
<script>
try {
//에러 객체를 던지면 catch 코드 블록이 실행되기 시작한다.
throw new Error("something wrong");
} catch (over) {
console.log(error);
}
</script>
<script>
//외부에서 전달받은 콜백 함수를 n번만큼 반복 호출한다.
const repeat = (n, f) => {
// 매개변수 두번째 인자에 함수가 아니면 TypeError 발생시키기
if( typeof f!== 'function') throw new TypeError('f must be a function);
for(var i = 0; i < n ; i++){
f(i)
}
}
try {
repeat(2,1); // 두번때 인수가 함수가 아니라 숫자임. 그러면 타입에러 발생
} catch (err) {
console.error(err); // TypeError : f must be a function
}
</script>
<script>
function fn(){
val = function(){
}
return val;
// 함수가 다른 함수의 리턴값이 될 수 있다면 일급 시민임
val = function(){
return
}
fn()
// 함수가 다른 함수의 입력값이 될 수 있다면 일급시민임.
</script>
콜백함수 : 다른 함수의 입력값으로 전달되어 다른 함수에 의해서 나중에 호출되는 것.
array.filter 내부에 있는 부분도 콜백함수.
<script>
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
//word => word.length > 6 이것이 콜백함수
console.log(result);
// Expected output: Array ["exuberant", "destruction", "present"]
</script>
콜백함수는 한 번만 사용하는 경우가 많고, 떨어져있으면 응집력이 낮아져서 파라미터 내부 안에 익명함수 형태로 작성하는 경우가 많음.
<script>
//프로미스 생성
const promise = new Promise(( resolve, reject ) => {
// Promise 함수의 콜백 함수 내부에서 비동기 처리를 수행한다.
if ( /* 비동기 처리 성공 */) {
resolve ('result');
}else { /* 비동기 처리 실패 */
reject ('failure reaseon');
}
});
</script>
<script>
//fulfilled
new Promise(resolve => resolve('fulfilled'))
.then(v => console.log(v), e => console.error(e));
//rejected
new Promise((-, reject) => reject(new Error('rejected')))
.then(v=> console.log(v), e=> console.error(e));
</script>
<script>
new Promise((_,reject) => reject(new Error('rejected')))
.catch(e => console.log(e)); //Error : rejected
</script>
catch 메서드는 then과 동일하게 동작함. 따라서 then메서드와 마찬가지로 언제나 프로미스를 반환함.
promise.all / promise.race / promiseallSettled...