IT이야기

Javascript "let"와 "var"의 차이점

cyworld 2021. 2. 18. 16:53
반응형

ECMAScript6부터는 사용할 수 있는 let 변수 선언문과 기존 var 선문의 차이점을 알아보도록 하겠습니다.

 

일단, 거두절미하고 예제부터 보겠습니다.

<html>
<head>
<title>테스트</title>
<script>
	function run() {
	  var foo = "Foo";
	  let bar = "Bar";

	  console.log(foo, bar); // Foo Bar

	  {
		var moo = "Mooo"
		let baz = "Bazz";
		console.log(moo, baz); // Mooo Bazz
	  }

	  console.log(moo); // Mooo
	  console.log(baz); // ReferenceError
	}

	run();
</script>
</head>
</body>
</html>

크롬 브라우저에서의 결과)

실행 결과

제일 큰 차이점은 "범위 지정 규칙"입니다.

즉, { }라는 블록안에 선언된 변수는 그 안에서만 사용할 수 있다라는겁니다.

Java로 예로 들자면 메소드 안에서 선언한 지역변수를 메소드 밖에서 사용할 수 없다라는 것과 동일하다고 생각하시면 됩니다.

 

예제에서는 baz라는 변수를 { } 안에 선언했는데 밖에서 호출했으므로 브라우저에서는 없는 참조 변수라고 에러를 출력하게 된것입니다.

 

어떻게 보면 Java의 객체지향과 전역/지역 객체 참조에 대한 기본 규칙이 ES6부터는 동일하게 적용해나간다고 할 수 있는데요.

과거의 브라우저 버전을 사용하고 있는 사용자들 입장에서는 let라는 기본 예약어를 읽지 못하고 에러가 발생하므로 바벨과 같은 과거 브라우저에서도 문제 없이 읽을 수 있도록 스크립트를 컴파일해주는 모듈을 사용해야 합니다.

 

차이점들이 여러개 있지만 다른 대표적인 차이점 하나는 변수를 중복해서 선언할 수 없다라는 점입니다.

<html>
<head>
<title>테스트</title>
<script>
	var foo = "foo1";
	var foo = "foo2"; // 문제 없음 foo를 재사용

	let bar = "bar1";
	let bar = "bar2"; // Uncaught SyntaxError: Identifier 'bar' has already been declared
</script>
</head>
</body>
</html>

크롬 브라우저 결과)

변수 중복 선언 에러

 

반응형