var name = 'heaeun'; // name 초기화
var age; // age 선언
console.log({name, age}); // {name: "heaeun", age: undefined}
age = 25; // age 초기화
선언과 호출이 동시에 일어난다
getName('heaeun'); // "heaeun"
function getName(name) {
return name;
}
리액트 컴포넌트에서 함수 선언 로직이 너무 길어서 컴포넌트 UI 구현부가 한눈에 안들어 오는경우 함수를 구현부 아래에 배치한다. 이 경우 함수 선언식을 사용해야 한다
변수 호이스팅과 같다.
선언부가 위로 끌어올려지고 할당은 코드가 실행될때 진행된다.
console.log(test); // undefined
test();
var test = function () {
console.log('h2?');
};
위의 코드는 아래의 코드와 같은의미다
var test;
console.log(test); // undefined
test();
test = function () {
console.log('h2?');
};
호이스팅 시점에 선언부만 끌어올리고 할당은 끌어올리지 못하므로 ReferenceError 발생 !
var, let은 재할당이 가능하고 const는 재할당이 불가능하다
var, let, const 모두 호이스팅이 된다.
위의 3가지 모두 평가 시점에 LexicalEnvironment에 변수 정보를 수집한다(호이스팅 개념으로 알고있는 동작)
var는 선언 단계에서 선언된 변수에 접근이 가능하다
let, const는 선언 단계에서 변수 수집을 하지만 코드가 실행되기 전에는 접근이 불가능하다.
변수 수집이 끝나고 실행되기 전까지 접근이 불가능한 이 단계를 TDZ(Temporal Dead Zone)라고 한다
function test() {
debugger;
console.log('before ? ', {a, b, c});
const a = 1;
const b = 2;
const c = 3;
console.log('after ? ', {a, b, c});
}
test();
호이스팅 되었지만 접근 불가
코드가 실행 되어야만 접근이 가능
MAth.PI : Math.PI 는 원주율 Pi 값을 반환합니다.
Math.abs : Math.abs 메서드는 인수로 전달된 숫자의 절대값을 반환합니다.
Math.round : Math.round 메서드는 인수로 전달된 숫자의 소수점 이하를 반올림한 정수를 반환합니다.
Math.ceil : Math.ceil 메서드는 인수로 전달한 숫자의 소수점
이하를 올리한 정수를 반환합니다. 소수점 이하를 올림하면 더 큰 정수가 됩니다.
Math.floor : Math.floor 메서드는 인수로 전달한 숫자의 소수점 이하를 내림한 정수를 반환합니다. 소수점 이하를 내림하면 더 작은 정수가 됩니다.
Math.sqrt : Math.sqrt 메서드는 인수로 전달한 숫자의 제곱근을 반환합니다.
Math.random : Math.random 메서드는 임의의 난수를 반환합니다. 이때 난수는 0이상 1만의 실수입니다.
Math.pow : Math.pow 메서드는 첫 번째 인수를 밑으로, 두 번째 인수를 지수로하여 거듭제곱한 결과를 반환합니다. Math.pow 메서드보다 ES7에 도입된 지수 연산자 **를 사용하는 것이 가독성이 더 좋습니다.
Math.max : Math.max 메서드는 전달받은 인수 중 가장 큰 수를 반환합니다. 인수가 전달되지 않으면 -infinity를 반환합니다.
Math.min : Math.min 메서드는 전달받은 인수 중 가장 작은 수를 반환합니다. 인수가 전달되지 않으면 infinity를 반환합니다.
코드를 입력하세요
const rabbit = {
name: 'tori',
color: 'white',
size: 'null',
birthDate: new Date(),
jump: () => {
console.log(`${name} can jump!`);
}
}
let json = JSON.stringify(rabbit);
console.log(json);
////{"name":"kim","color":"white","size":"null","birthDate":"2020-12-19T11:03:07.200Z"}
let obj = JSON.parse(json);
console.log(obj);
//{name: "tori", color: "white", size: "null", birthDate: "2020-12-19T11:31:45.807Z"}
위 코드에서 birthDate는 JSON.stringify()를 했을 때 Date 객체에서 얻은 문자열을 가져온다. 이를 방지하기 위해선 아래 코드처럼 작성을 해야한다.
let obj = JSON.parse(json, (key, value) => {
return key === 'birthDate' ? new Date(value) : value;
// JSON에서 가져오는 key값이 'birthDate'인 경우 new Date(value)로 새로 생성, birthDate 이외의 경우 기존 value값을 가져온다.
})