[Javascript] var키워드로 선언된 변수의 문제점

김주현·2021년 8월 25일
0

[Javascript]

목록 보기
11/16

ES5에서 변수를 선언할 수 있는 유일한 방법은 var키워드를 사용하는 것이었다.
하지만 var키워드로 선언된 변수는 아래와 같은 문제점들이 있다.

정의된 변수가 함수의 스코프를 가진다.

스코프란 변수가 사용될 수 있는 영역을 말한다.

// var변수 i는 변수가 정의가 되어진 위치에서 결정이 나게 된다.
function example() {
	var i = 1;
}
// 함수 스코프에서 벗어난 곳에서 사용하는 경우 에러가 나게 된다.
console.log(i);

var키워드를 사용하지 않고 변수를 할당하게 되어지면 '전역변수'의 역할로서 사용이 되어지게 된다.

//전역변수로서 사용되어지는 것을 피하기 위해서 'use strict'를 선언할 수 있습니다.
'use strict'; 

function example1() {
  i = 1;			
  //변수 i는 전역변수로서 다른 함수에서도 사용할 수 있습니다.
}

function example2() {
  console.log( i );
}

example1(); // example1에서 넣었던 값이
example2(); // example2에서 출력된다.

반복문에서 정의된 변수가 반복문이 끝난 이후에도 계속 남아 있다.

for문,while문,switch문,if문 등 함수 내부에서 작성되는 모든 코드가 계속 남아 있는 문제가 있다.

for (var i = 0; i < 10; i++) {
  console.log(i);
}

console.log('last:', i);

// for문이 끝난 이후에도 i값을 출력하게 됨

위의 문제를 해결하기 위해서 '즉시실행 함수'를 사용하기도 한다.
즉시실행 함수는 바로 실행을 하고 사라지는 함수를 말한다.

(function () {
  for (var i = 0; i < 10; i++) {
      console.log(i);
  }
})();


console.log('last:', i); 
// 함수 레벨로 바뀌어 scope가 설정되어졌기 때문에 에러 발생

var를 이용하면 한번 정의된 변수를 재정의 할 수 있다.

var myVar=1;
var myVar=2;   //재정의

위와 같은 코드가 에러 없이 사용될 수 있다는 것은 직관적이지 않으며 버그로 이어지기 쉽다.

var변수는 한번 정의되어진 변수를 재할당함으로써 변수의 재할당이 가능해진다.

var PI = 3.141592;
PI = 123;           //재할당

Conclusion

이러한 var변수의 문제점을 보안하기 위해 ES6은 let과 const키워드를 도입하였다고 볼 수 있다.


참고사이트 :

변수var의 문제점
https://velog.io/@crewd/JS-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-var%EC%9D%98-%EB%AC%B8%EC%A0%9C%EC%A0%90
https://velog.io/@groovejumat/%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B81.-var-%EB%B3%80%EC%88%98%EC%9D%98-%EB%AC%B8%EC%A0%9C%EC%A0%90
https://gist.github.com/LeoHeo/7c2a2a6dbcf80becaaa1e61e90091e5d

0개의 댓글