호이스팅

참고:
모던 자바스크립트: 선언하기 전 사용할 수 있는 var
MDN Hoisting

호이스팅: 변수가 끌어올려지는 현상.var로 선언한 모든 변수는 함수의 최상위로 끌어올려짐.

변수의 선언과 변수에 값을 할당하는 단계를 분리한 후, 모든 변수/함수 선언을 해당 스코프의 최상단으로 끌어올리는 것 => 변수를 정의하는 코드보다 사용하는 코드가 앞서 등장할 수 있음.

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)
함수가 만들어진 목적과 다른 효과 또는 부작용. 함수에 예상할 수 없는 일이 생길 가능성이 존재할 때, 이 함수는 부수효과를 가질 수 있는 함수가 됨

순수함수

부수효과가 없도록 프로그래밍 한 함수.
오직 함수의 입력만이 함수의 결과에 영향을 주는 함수.
어떤 전달인자가 주어졌을 때 항상 똑같은 값이 리턴되므로 예측 가능한 함수.

  • 외부의 데이터를 직접 사용하지 않고 파라미터로 input값을 받음
  • input값에 의해 output이 결정되므로, 외부 값들이 변경되더라도 함수 자체는 외부 영향을 받지 않으므로 side-effect 없이 작동됨

순수함수를 만들기 위해서는 데이터 불변성을 유지하는 것이 중요함.
함수의 전달인자로 참조 자료형이 전달될 경우 해당 데이터의 불변성을 보장하는 메서드인 map, filter, reduce를 사용하는 것이 좋음

1. 참조자료형

  • 배열, 객체, 함수
  • 주소를 부여하여 그 안에 값을 넣음
  • 변수에 할당할 때 변수에 값이 아닌 주소를 저장함
  • 고정된 크기의 보관함이 아니라 동적으로 크기가 변하는 특별한 보관함(heap)을 사용

2. 원시자료형

  • number, string, boolean, null, undefined 같이 고정된 저장공간을 차지하는 데이터
  • 변수에 하나의 데이터만 담음

reducer가 순수함수인 이유

https://www.freecodecamp.org/news/why-redux-needs-reducers-to-be-pure-functions-d438c58ae468/#.mwamvvqbz

profile
oneThing

0개의 댓글