참고:
모던 자바스크립트: 선언하기 전 사용할 수 있는 var
MDN Hoisting
호이스팅: 변수가 끌어올려지는 현상.
var로 선언한 모든 변수는 함수의 최상위로 끌어올려짐.
변수의 선언과 변수에 값을 할당하는 단계를 분리한 후, 모든 변수/함수 선언을 해당 스코프의 최상단으로 끌어올리는 것 => 변수를 정의하는 코드보다 사용하는 코드가 앞서 등장할 수 있음.
var로 선언한 변수는 블록 스코프가 아닌 함수 수준 스코프를 가짐var선언은 함수가 시작되는 시점(전역 공간에선 스크립트가 시작되는 시점)에서 처리됨단 변수 선언(var)은 호이스팅되지만 변수에 값을 할당(=)하는 경우는 호이스팅되지 않음
function sayHi() { var phrase; // 변수 선언 alert(phrase); // undefined phrase = "Hello"; // 값 할당 } sayHi();모든
var선언은 함수 시작 시 처리되기 때문에var로 선언한 변수는 어디서든 참조할 수 있으며 변수에 값을 할당하기 전까지는 undefined를 배출함
예제1
console.log(num) // var 선언으로 인해 호이스팅되어 undefined 배출 var num; // 선언 num = 6; // 값 할당예제 2
console.log(num) // ReferenceError num=6; // 값 할당
함수가 부수효과(Side-Effect)가 없도록 프로그래밍하는 것
부수효과(Side-Effect)
함수가 만들어진 목적과 다른 효과 또는 부작용. 함수에 예상할 수 없는 일이 생길 가능성이 존재할 때, 이 함수는 부수효과를 가질 수 있는 함수가 됨
부수효과가 없도록 프로그래밍 한 함수.
오직 함수의 입력만이 함수의 결과에 영향을 주는 함수.
어떤 전달인자가 주어졌을 때 항상 똑같은 값이 리턴되므로 예측 가능한 함수.
순수함수를 만들기 위해서는 데이터 불변성을 유지하는 것이 중요함.
함수의 전달인자로 참조 자료형이 전달될 경우 해당 데이터의 불변성을 보장하는 메서드인 map, filter, reduce를 사용하는 것이 좋음
1. 참조자료형
- 배열, 객체, 함수
- 주소를 부여하여 그 안에 값을 넣음
- 변수에 할당할 때 변수에 값이 아닌 주소를 저장함
- 고정된 크기의 보관함이 아니라 동적으로 크기가 변하는 특별한 보관함(heap)을 사용
2. 원시자료형
number, string, boolean, null, undefined 같이 고정된 저장공간을 차지하는 데이터