[JS] ES6 - Variables
이채현
Variables
Let and Const
var
를 절대 사용하지 않고 let & const
사용하기
var
를 쓰면 안되는 이유var hoisting
때문에…
- var는 라이프사이클에서… 선언과 초기화를 동시에 한다.
- global scope에 변수/함수를 선언할 경우 아무리 아래에 선언해도 제일 위로 올라간다. → 어디서 선언했든 상관없이, 항상 제일 위로 선언을 끌어올려준다.
- block scope를 철저히 무시한다.
⇒ 이러한 유연성으로 작은 어플리케이션을 금방 만들 수 있지만, 프로젝트의 규모가 커지면서 나중에서는 선언하지도 않은 값이 멋대로 출력되거나, 개발자들간의 협업에서 여러가지 문제점이 생길 수 있다.
let
은 선언과 초기화가 분리되어 그 사이에 TDZ가 생성되고, 접근할 경우 Reference Error가 발생한다.const
는 선언과 초기화가 동시에 진행되지만, 선언 이전에 TDZ가 생성되어 접근하면 Reference Error가 발생한다.Dead Zone
temporal dead zone(TDZ)에 영향을 받는 구문은 크게..
- const 변수
- let 변수
- class 구문
- constructor() 내부의 super()
- 기본 함수 매개변수
Block Scope
let & const
는 block scope {}를 가짐
- 외부에서 접근 불가능하다.
var
는 function scope를 가짐
- function 안에서 생성 된 var변수는 외부 function에서 접근 할 수 없지만, if/else, for등안에서 생성 된 var는 어디서는 접근 가능하다.
Immutabe Data Types
primitive types
, frozen objects
… 값이 바뀌지 않은 type
CONSTANTS는 Immutable Data Types이며, 프로그래밍할 때 왠만하면 Immutable Data Types를 사용하자.
💁🏻♀️ Immutable Data Types을 사용해야 하는 이유
- security 해커들이 코드의 값을 바꾸는 것을 방지한다.
- thread safety 어플리케이션을 실행하면 한가지의 프로세스가 할당되고, 그 프로세스 안에서 다양한 thread가 동시에 돌아가게 된다.이때 이 다양한 thread가 동시에 변수에 접근해서 값을 변경할 수 있게 되는 위험성이 생기는데, 이것을 방지한다.
- reduce human mistakes 앞으로 해당 코드를 변경할 더 좋은 방안이 없다면,
const
를 이용해 작성하여 본인 혹은 다른 개발자가 코드를 변경할때 발생할 수 있는 실수를 방지해준다.
[JS] ES6 - Variables