TIL 3 | 자바스크립트 변수 및 usestrict

Lofo·2021년 2월 10일
0

Javascript

목록 보기
10/14

Use strict

usestrict문법은 ES5부터 추가된 문법이라고 합니다. 초기 Javascript는 flexible하게 만들어졌는데, 이는 코드의 안정성이나 보안성을 떨어트리는 요인이 되었다고 합니다. 그래서 이를 보완한 엄격모드를 만들게 되었고 엄격모드를 쓰는 코드가 바로 "usestrict"라고 합니다.

'use strict';

엄격모드는 비엄격모드일 때 가능했던 몇몇을 제한하면서 안정성과 보안성을 높인다고 합니다. 비엄격모드일 때 가능하지만 엄격모드일 때 불가능한 예를 한가지 들자면 바로 아래의 코드입니다.

console.log(age);
a = 6;
// 비엄격모드에서는 6이 출력됩니다. 엄격모드에서는 오류가 나오게 됩니다.

위 코드에서는 값이 지정되지 않은 변수를 먼저 출력한다고 코드를 작성하고 나중에 변수에 값을 부여해도 실행이 됩니다. 심지어 나중에 부여한 값이 출력됩니다.
자바스크립트는 이런 상식적이지 않은 코드도 에러 없이 동작하도록 하여 프로그래밍 세계에 입문하는데 도움이 되었다고 합니다. 하지만 이런 코드는 길이가 길어지면 감당할 수 없는 문제로 커진다고 합니다. 엄격모드는 이런 것들을 애초에 에러로 잡아서 개발자들이 할 수 있는 실수를 줄여준다고 합니다.
추가로 엄격모드로 작성된 코드와 비엄격모드로 작성된 코드는 서로 연결하면 문제가 생긴다고 하니, JS코드를 연결할 때는 엄격모드로 작성되었는지 확인할 필요가 있다고 합니다.

Var

var은 변수 선언 방식 중 하나라고 합니다. 이는 ES6로 넘어오면서 더이상 사용하지 않는 걸 권장하는 방식이라고 합니다. 그 이유는 두가지가 있습니다.
첫번째 이유는 Hosting입니다. Hosting은 변수나 함수의 선언문을 최상단으로 끌어올려서 변수나 함수를 선언하기 이전에도 사용할 수 있도록 해주는 JavaScript의 특성입니다.(함수 밖에서 var을 선언하면 소스 내 최상단, 함수 내에서 var을 선언하면 함수 내 최상단으로 끌어올려준다고 합니다.)이런 특징으로 인해 다음과 같은 코드가 정상적으로 실행됩니다.

	age = 4;
   var age;
	console.log(age);
	//결과: 4

var age; 코드를 최상단으로 올려 주기 때문에 작성한 코드 상에는 age = 4;를 먼저 선언했어도 나중에 선언한 age 안에 4라는 값이 들어가게 됩니다.
두번째 이유는 no block scope입니다. var로 선언한 변수는 블록{} 레벨이 아니라 함수function() 레벨을 따진다고 합니다. 그래서 블록{} 범위에 상관없이 어디에 선언했든지 간에 사용할 수 있게 됩니다. 그래서 다음과 같은 코드가 실행됩니다.

	{
     var age;	
     age = 4;
	}
	console.log(age);
	//결과: 4

var을 사용했을 때의 오류들은 var 참고 사이트에서 추가적으로 확인할 수 있습니다.

Let과 Const

ES6로 넘어오면서 var의 역할을 대신할 수 있는 let과 const가 추가되었습니다. let과 const는 블록 레벨로 범위를 따지고 hosting도 되지 않습니다. let과 const의 가장 큰 차이점은 변경가능한가 입니다.
let은 선언하고 나서 나중에 값을 변경할 수 있습니다. let은 다음과 같이 선언하고 사용합니다.

let globalName = 'global name';
{
   let name = 'ellie';
   console.log(name); // ellie가 출력됩니다.
   name = 'hello';
   console.log(name); // hello가 출력됩니다.
   console.log(globalName); //global name이 출력됩니다.
}
console.log(name); // {}안에 있는 name이 전달되지 않으므로 undefined가 출력됩니다.
console.log(globalName); //global name이 출력됩니다.

const는 선언과 동시에 값을 대입하고 그 이후로는 변경할 수 없습니다. const처럼 변경할 수 없는 변수를 사용하면 좋은 점이 있다고 합니다. 보안적으로도 안전하고, 쓰레드 안정성에 도움을 주고, 개발자의 실수를 줄일 수 있다고 합니다.
const는 다음과 같이 선언하고 사용합니다.

const daysInWeek = 7;
const maxNumber = 5;
console.log(daysInWeek); // 7이 출력됩니다.
console.log(maxNumber); // 5가 출력됩니다.
// daysInWeek = 7; // 이 코드는 에러로 나오게 됩니다.
profile
Love God, Love People, Love Code.

0개의 댓글