function example() {
var i = 1;
}
console.log(i) // ReferenceError: i is not defined
use strict
를 선언하기도 한다.for (var i = 0; i < 10; i++) {
console.log(i)
}
console.log(i); // 10
// 예시 1. 정의되지 않은 변수 사용하기
console.log(myVar) // 참조 에러
// 예시 2-1. 변수가 정의된 시점보다 먼저 변수 사용하기
console.log(myVar) // undefined
var myVar = 1;
// 예시 2-2. 호이스팅의 결과
var myVar = undefined
console.log(myVar) // undefined
myVar = 1 // 변수의 정의만 끌어올려지고 값은 원래 정의했던 위치에서 할당
// 예시 3. 변수가 정의된 시점보다 먼저 변수값에 값을 할당하기
console.log(myVar) // undefined
myVar = 2;
console.log(myVar) // 2
var myVar = 1;
var myVar = 1;
var myVar = 2;
나머지 매개변수는 매개변수 개수가 가변적일 때 유용하다.
function printLog(a, ...rest){ // 하나의 인자를 제외한 나머지를 rest 매개변수에 할당
console.log({a, rest});
}
printLog(1, 2, 3); // {a : 1, rest: [2, 3]}
// ES5 ver. arguments 키워드
function printLog(a) {
const rest = Array.from(arguments).splice(1);
console.log({a, rest});
}
const numbers = [10, 20, 30, 40];
const result1 = getValues(numbers, 5, 25); // 인수가 의미하는 바를 파악하기 어려움.
const result2 = getValues( {numbers, greaterThan: 5, lessThan: 25} );
// 선택적 매개변수에 undefined를 넣어야 한다. 이러한 방식은 매개변숙다 많아지면 관리하기 힘들어진다.
const result1 = getValues(numbers, undefined, 25);
const result2 = getValues( { numbers, greaterThan: 5} );
const result3 = getValues( { numbers, lessThan: 25} );
명명된 매개변수를 사용하면 함수 호출 시 매개변수의 이름과 값을 동시에 적을 수 있으므로 가독성이 높다.
// 같은 기능을 하는 then 메서드와 catch 메서드
Promise.reject(1).then(null, error => {
console.log(error);
});
Promise.reject(1).catch(error => {
console.log(error);
});
// then 메서드의 onReject를 사용했을 때의 문제점
Promise.resolve().then(
() => {
throw new Error('some error');
},
error => {
console.log(error);
}
);