일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- 컴포넌트
- string
- 알고리즘
- array
- SasS
- JavaScript
- 자료구조
- github
- 파이썬
- dynamic programming
- 변수
- Python
- math
- scss
- 코딩테스트
- 자료형
- 프로그래머스
- JavaSceipt
- greedy
- HTML
- Algorithm
- computed
- 백준
- vue.js
- JS
- hash table
- leetcode
- sorting
- CSS
- Today
- Total
Posis
[JavaScript] var를 지양해야 하는 이유 본문
var를 지양해야 하는 이유
- 재선언이 가능하므로 코드에 에러가 생길 수 있다.
var은 같은 변수명으로 재선언이 가능합니다. 이로 인해서 코드가 길어졌을 때 의도치 않게 같은 변수명을 선언했을 경우 밑에 선언된 var의 변수의 데이터가 할당되게 됩니다.
var age = 22;
var age = 23;
var age = 24;
var age = 25;
console.log(age); // 25
만들었던 프로젝트의 코드가 몇천 줄이 넘어갈 때 100번째 줄에서 var age를 선언하고 3500번 줄에서 다시 한번 var age를 선언하게 된다면 3500번 줄에서 재 선언한 age의 데이터가 할당되게 됩니다. 그러면 결괏값이 의도치 않게 다른 값을 출력할 수 있게 되고 이 오류를 찾기 위해서 코드를 다시 한번 살펴봐야 합니다. 물론 age의 변수만 찾아서 할 수 있지만 ES6에 나온 let 키워드를 사용하면 재선언이 불가능하므로 코드를 작성할 때 미리 파악하고 다른 변수명을 작성할 수 있습니다.
중복 선언을 해도 오류가 나타나지 않는 것이 큰 특징입니다.
let age = 22;
let age = 23;
let age = 24;
let age = 25;
console.log(age); // SyntaxError: Identifier 'age' has already been declared
let으로 하면 이렇게 이미 age라는 변수명이 이미 선언돼있다고 오류를 출력하게 됩니다.
- scope에 차이
- var은 function scope
- let과 const는 block scope
var 변수 = 'global';
if (변수 == 'global') {
var 변수 = 'local';
console.log(변수); // local
}
console.log(변수); // local
이처럼 var을 처음에 변수 = 'global'을 선언과 할당을 했지만 if라는 block안으로 들어와서 재 할당을 함으로써 변수는 'local'로 변경되고 block 밖에서도 'local'이 출력되게 됩니다. 그 이유는 var은 function scope이기 때문에 그렇습니다. 이와 같이 var은 다시 한번 의도치 않은 오류를 범하게 되는 것입니다.
var 변수 = 'global';
function test() {
var 변수 = 'local';
console.log(변수);
}
test(); // local
console.log(변수); // global
말했듯이 var은 function scope이기 때문에 function안에서 재 선언 후 할당하면 전혀 다른 변수명으로 인지하게 됩니다.
let 변수 = 'global';
if (변수 == 'global') {
let 변수 = 'local';
console.log(변수); // local
}
console.log(변수); // global
let은 block scope이기 때문에 제가 의도했던 대로 local과 global이 출력하게 됩니다. 물론 상황에 따라서 잘 사용하면 되지만 코딩하는 시간도 오래 걸릴 텐데 오류가 생기게 되면 시간을 또 써야 하는 일이 생기기 때문에 var를 지양해야 할 것 같습니다.
- 호이스팅
호이스팅은 런타임 시 선언한 변수를 최상단으로 끌어올리는 것을 말합니다. 이로 인해서 코드 결과를 예측하기가 힘들어지게 됩니다.
console.log(변수); // undefined
var 변수 = '22';
console.log(변수); // 22
let과 const로 선언했다면 맨 윗줄에 변수 출력은 에러가 나타나게 됩니다. 하지만 var는 호이스팅이 존재하기 때문에 데이터는 할당되지 않고 선언만 했다고 간주하게 됩니다.
test(); // 호이스팅
function test() {
console.log('호이스팅');
}
test(); // 호이스팅
하지만 함수는 밑에서 작성했지만 결괏값을 출력하게 됩니다. 이러한 결과물이 나타나기 때문에 코드가 많아졌을 때 런타임 결과를 예측하기가 힘들어집니다.
오늘은 var를 지양해야 하는 이유에 대해서 다뤄봤는데 혹시나 틀린 내용이 있거나 지적할 내용이 있다면 댓글로 남겨주시기 바랍니다.
'JavaScript' 카테고리의 다른 글
[JavaScript] 배열 내장 함수 (1) | 2021.12.16 |
---|---|
[JavaScript] Equality(==) 지양 혹은 줄이기 (0) | 2021.12.06 |
[JavaScript] 이벤트 버블링(Bubbling)과 캡쳐링(Capturing) (0) | 2021.10.26 |
[JavaScript] Ajax 란? (0) | 2021.10.20 |
[JavaScript] 여러 개 모달창 닫기 (0) | 2021.10.19 |