

자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 오류를 발생시킨다.
'use strict'를 추가한다. 'use strict';
function foo() {
x = 10; // ReferenceError: x is not defined
}
foo();
strict mode 적용한다.function foo() {
'use strict';
x = 10; // ReferenceError: x is not defined
}
foo();
use strict;를 위치시키지 않으면 strict mode가 제대로 작동하지 않는다.function foo() {
x = 10; // 에러 발생하지 않는다.
'use strict';
}
foo();
전역에 사용 => 라이브러리가 non-strict mode로 작성되어 있을수도 있다.
함수단위 사용 => 다른 함수에서 non-strict mode면 오류를 일으킬수있다.
그러므로 항상 스크립트 단위로 적용하자.
암묵적 전역 - 선언하지 않은 변수 참조 ReferenceError
변수, 함수, 매개변수의 삭제 - delete 연산자로 변수, 함수, 매개변수 삭제하면 SynstaxError
매개 변수 이름의 중복 - 중복된 매개변수 이름을 사용하면 SynstaxError
with 문의 사용 - with문 사용시 SynstaxError
자바스크립트 객체는 크게 3개의 객체로 분류할 수 있다.
Math, Reflect, JSON 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체다. 또한 인스턴스 없이 호출가능한 빌트인 정적 메서드를 제공한다.DOM, BOM, Canvas, fetch전역객체는, 코드가 실행되기도 전에 JS엔진이 어떤 객체보다 먼저 생성되는 특수한 객체이며, 어떤 객체에도 속하지 않는 최상위 객체다.
브라우저 환경마다 가리키는 이름이 다르다.
- nodejs : global
- 브라우저 : window, self, frames, 전역this
빌트인 전역 프로퍼티(전역객체의 프로퍼티) : Infinity, NaN, undefined
빌트인 전역 함수: eval, isFinite, isNaN, parseFloat, parseInt, encodeURI, decodeURI, encodeURIComponent
var x = 10; // 전역 변수
function foo () {
// 선언하지 않은 식별자에 값을 할당
y = 20; // window.y = 20;
}
foo();
// 선언하지 않은 식별자 y를 전역에서 참조할 수 있다.
console.log(x + y); // 30
선언하지 않은 변수가 존재하는 것처럼 되는 현상.
즉, 전역객체(window)에 동적 프로퍼티 할당이 이루어진다.
전역변수는 delete로 삭제되지 않지만, 암묵적 전역으로 할당된 변수는 삭제된다. 호이스팅도 일어나지 않는다.
// 전역 변수 x는 호이스팅이 발생한다.
console.log(x); // undefined
// 전역 변수가 아니라 단지 전역 객체의 프로퍼티인 y는 호이스팅이 발생하지 않는다.
console.log(y); // ReferenceError: y is not defined
var x = 10; // 전역 변수
function foo () {
// 선언하지 않은 식별자에 값을 할당
y = 20; // window.y = 20;
}
foo();
// 선언하지 않은 식별자 y를 전역에서 참조할 수 있다.
console.log(x + y); // 30
console.log(window.x); // 10
console.log(window.y); // 20
delete x; // 전역 변수는 삭제되지 않는다.
delete y; // 프로퍼티는 삭제된다.
console.log(window.x); // 10
console.log(window.y); // undefined