'use strict';
이 코드를 스크립트나 함수의 시작 부분에 선언하고 strict 모드로 개발한다면,
자동으로 허용되는 잘못된 코드를 오류로 변경하여 (존재하지 않는 변수/객체 등을 잡아내는 등)
모든 코드가 strict 모드에서 실행되어 불필요한 오류를 예방하고 성능 개선도 기대할 수 있다.
(* es5에서 추가됨)
1. var
var x = "Hello world";
var x = 0;
//오류없이 작동한다.
선언+초기화 -> 할당
어디든 호이스팅이 가능한 선언방식이다. block scope을 전부 무시하고 function scope를 사용한다. 변수를 어느 곳에서나 불러온다. 위험부담이 크다.
그러나 es6 이후 아래 선언방식이 나온다.
2. let
let x = "Hello world";
let x = 0;
// SyntaxError: 'x' has already been declared
선언 -> 초기화 -> 할당
변수가 수정될 수 있는 방식이다. (mutable type)
let의 호이스팅은 scope 단위로 이루어진다.
let x = 30;
function showX(){
console.log(x);
let x = 10;
}
showX();
위 예시에서 console.log(x)는 TDZ(변수가 할당되기 전으로, 사용 불가한 영역)이다.
hoisting은 되었으나 TDZ가 발생하여 showX는 30도 10도 찍지 않게 되므로,
showX는 console.log(x)에서 ReferenceError가 나서 작동하지 않는다.
3. const
const x = "Hello world";
선언 + 초기화 + 할당 (동시에)
const는 한번 할당된 변수를 변경할 수 없다. (immutable data type)
출처 : 드림코딩 https://www.youtube.com/@dream-coding / 코딩앙마 https://www.youtube.com/@codingangma
'🟨 JavaScript > 개념' 카테고리의 다른 글
| [코딩앙마 외] 객체 리터럴과 객체 접근법, 그리고 생성자 함수 (0) | 2022.04.14 |
|---|---|
| [코딩앙마 외] 객체(Object)와 프로퍼티(property) (0) | 2022.04.14 |
| [코딩앙마] 함수선언문과 함수표현식, 그리고 화살표함수 (추가) (0) | 2022.04.14 |
| [드림코딩/코딩앙마] scope와 hoisting, 그리고 TDZ (추가) (0) | 2022.04.14 |
| [드림코딩] html에 js를 링크하는 여러가지 방법들 (0) | 2022.04.14 |