ES6 도입 이후 현대의 JS 프로그래밍에서는 var 키워드를 사용하지 않고 let과 const를 사용한다.
옆 사람이 var를 사용한다면 뚝배기를 깨자!
일반적으로 다른 프로그래밍 언어는 block-level scope로 동작하는 반면에 ES5(var 키워드만 있던 시절) JS에서는 function-level scope로 동작했다.
여기서 scope는 변수를 접근할 수 있는 범위 => 지역, 전역 변수
block-level scope는 일반적인 프로그래밍 언어에서 지원하는
( while, for, if, function.. 등 ) 해당 문법안에서 선언한 변수들은
모두 해당 Block { } 안에서만 유효한 지역 변수로 사용되어 Block 밖에서는 사용할 수 없다는 특징이 있다.But,
function-level scope에서는 ( while, for, if.. 등 ) 모두 제외하고
function에서만 지역적으로 사용할 수 있다는 특징이 있다. 그러므로
( for, while if.. ) 등에서 선언한 변수를 해당 Block 밖에서도 사용이 가능한 전역 변수가 된다는 특징이 있다.그러므로 function-level scope이 되면 지역 변수과 전역 변수의 구분이 애매하게 되고 프로그래밍적으로 좋지 못한 코드가 될 가능성이 높다고 생각한다. 그래서 block-level scope이 더 체계적이라고 할 수 있을 것 같다.
그럼 var를 사용하지 않는 이유는 function-level scope 하나의 이유뿐일까??
var를 사용하지 않는 이유는 하나 더 있음. hoisting을 지원하는 특징 때문
hoisting 이란 어디에 선언했는지에 상관없이 제일 위로 끌어올려 주는 것.
그런데 이게 변수에 적용되면 변수를 선언하기도 전에 사용하여 값을 조작할 수 있고, 아래에서 그 변수를 다시 선언할 수 있다.
말만 들어도 var는 쓰레기 같음
그래서 ES6( let, const ) 도입 이후 JS 에서는 var를 사용하지 않습니다!
크게 3가지 이유가 있음!
- Security (보안)
- Thread safety (여러 쓰레드가 동시에 수정하는 작업을 방지)
- 협업 or 실수 방지
왜 이 3가지가 이유인지 생각하거나 구글링 해봅시다!!! 몰라서 그런 거 아님 ㅎ