Strict Mode#
ES5 ๋ถํฐ ์ง์
์ ์ญ ๋๋ ํจ์ body์ ์ ๋์
use strict์ถ๊ฐ์๋ฌต์ ์ ์ญ ๋ณ์ ๋ฐฉ์ง
๋ณ์, ํจ์, ๋งค๊ฐ๋ณ์์ ์ญ์ ๋ฐฉ์ง
function foo(a) { 'use strict'; delete a; // SyntaxError: Delete of an unqualified identifier in strict mode.}๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ์ค๋ณต ๋ฐฉ์ง
with๋ฌธ์ ์ฌ์ฉ์ผ๋ฐ ํจ์์
this์undefined๋ฐ์ธ๋ฉ'use strict'; function foo() { console.log(this);} foo(); // undefinedfunction foo() { console.log(this);} foo(); // Window
DOCTYPE#
Document Type์ ์ฝ์๋ก ๋ฌธ์๊ฐ ์ด๋ค ๋ฒ์ ์ผ๋ก ์์ฑ๋์๋์ง ๋ฏธ๋ฆฌ ์ ์ธํ์ฌ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋ด์ฉ์ ์ฌ๋ฐ๋ก ํ์ํ ์ ์๋๋ก ํด์ฃผ๋ ๊ฒ์ด๋ค.
โ
DOCTYPE์ ๋ ๊ฑฐ์ํ ์ด์ ๋ก ํ์ํ๋ค. ์๋ตํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฌธ์๋ฅผquirks mode(ํธํ ๋ชจ๋)๋ก ๋ ๋๋งํ๊ณ , ํฌํจํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฌธ์๋ฅผno-quirks-mode(๋๋ standard mode)๋ก ๋ ๋๋ง ํ๋ค.
quirks mode vs standard mode#
quirks mode#
์ค๋๋ ๋ฌธ์๊ฐ ์ต์ ๋ธ๋ผ์ฐ์ ์์ "๋นํ์ค ๋ชจ๋"(๊ณผ๊ฑฐ Navigator 4 or IE 5)๋ฅผ ์ ์ฉํด์ ๋์ํ๋ค.
์ต์ ๋ธ๋ผ์ฐ์ ์์ ๊นจ์ง์ง ์๊ณ ๋ณด์ฌ์ง๊ฒ ๋์ง๋ง, ๋ธ๋ผ์ฐ์ ๋ณ๋ก ๋ค๋ฅด๊ฒ ๋ณด์ฌ์ง๊ฒ๋๋ค.
standard mode#
- ํ์ค HTML, CSS๋ฅผ ์ ์ฉํ์ฌ ๋ ๋๋งํ๋ค.
DTD (Document Type Definition)#
๋ฌธ์ ํ์์ ์ ์ํ ๊ฒ์ผ๋ก DOCTYPE ์ ๋ช
์ํ ๋ ์ฌ์ฉํ ์ ์๋ค. DTD ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค. ๋ชจ๋ ํ์
์ ํน์ฑ์ ๋ค ํ์
ํ๋ ๊ฒ์ ๋ฌด๋ฆฌ๊ฐ ์์ ๊ฒ ๊ฐ๊ณ , ํ์ฌ ์์ ์์ HTML5 ๋ฌธ์๋ฅผ ์์ฑํ๊ธฐ ์ํด <!DOCTYPE html> ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ต์ ์ด๋ค.
XHTML 1.1
XHTML 1.0
Strict DTD
Transitional DTD
Frameset DTD
HTML 4.01
Strict DTD
Transitional DTD
Frameset DTD
HTML 5
ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง#
๋ฐ๋ฒจ#
๋ฐ๋ฒจ์ ํ์ฌ ๋ฐ ์ด์ ๋ธ๋ผ์ฐ์ ๋๋ ํ๊ฒฝ์์ ES6 ์ด์์ ์ฝ๋๋ฅผ ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ JavaScript ๋ฒ์ ์ผ๋ก ๋ณํํ๋๋ฐ ์ฌ์ฉ๋๋ ๋๊ตฌ ๋ชจ์(toolchain)์ด๋ค.
๋ฐ๋ฒจ์ ์ธ ๋จ๊ณ๋ก ๋น๋๋ฅผ ์งํํ๋ค.
ํ์ฑ (Parsing) : ์ฝ๋๋ฅผ ์ฝ๊ณ ์ถ์ ๊ตฌ๋ฌธํธ๋ฆฌ(AST)๋ก ๋ณํํ๋ ๋จ๊ณ
๋ณํ (Transforming) : ๋ฐ๋ฒจ ํ๋ฌ๊ทธ์ธ์ด ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ๋ ๋จ๊ณ
์ถ๋ ฅ (Printing) : ๋ณ๊ฒฝ๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ถ๋ ฅํ๋ ๋จ๊ณ
์ปดํ์ผ๋ฌ๋ก์จ ๋ฐ๋ฒจ ํ๋ฌ๊ทธ์ธ(๊ตฌ๋ฌธ ๋ณํ)๊ณผ ํด๋ฆฌํ์ด ํ๋ ์ผ(๋ด์ฅ๋ ํจ์/๊ฐ์ฒด ๊ตฌํ )์ ๊ตฌ๋ถํ๋ ๊ฒ์ด ์ค์ํ๋ค.
ํ์ดํ ํจ์
๊ตฌ๋ฌธ ๋ณํ์ผ๋ก ์ด์ ๋ฒ์ ์ ์ฝ๋๋ก ๋ง๋ค ์ ์๋ค.
// ์ปดํ์ผ ์ const sum = (a, b) => a + b;// ์ปดํ์ผ ํ'use strict'; var sum = function sum(a, b) { return a + b;};PromisePromise๋ ES6์์ ์ถ๊ฐ๋ ํ์ค ๋ด์ฅ ๊ฐ์ฒด(standard built-in object)์ด๋ค. ๋ฐ๋ผ์ ๊ตฌ๋ฌธ ๋ณํ์ผ๋ก ์ด์ ๋ฒ์ ์ ์ฝ๋๋ก ๋ง๋๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ์ํ ํด๋ฆฌํ์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
๋ฐ๋ฒจ์
useBuiltIns์ต์ ๊ธฐ๋ณธ์ ์ผ๋ก
import 'core-js'๋core-js์ ๋ชจ๋ ํด๋ฆฌํ ๊ฐ์ ธ์ดuseBuiltIns: entry์ต์ ์ ์ฃผ๋ฉดimport 'core-js'์์ "๋์ ๋ธ๋ผ์ฐ์ ์ ํ์ํ" ํด๋ฆฌํ์ ๋ชจ๋ ๊ฐ์ ธ์ดuseBuiltIns: usage์ต์ ์ ์ฃผ๋ฉดimport๋ฅผ ํ์ง ์์๋ ์ฝ๋๋ฅผ ์ ์ ๋ถ์ํ์ฌ, ์ฝ๋์์ ์ฌ์ฉํ๊ณ ์๋ ํด๋ฆฌํ๋ง ๊ฐ์ ธ์จ๋ค.์ง์ํ๋ ค๋ "๋ธ๋ผ์ฐ์ ๋ง๋ค" ํ์ํ ํด๋ฆฌํ๋ง
importํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ๋๊ฐ? ex) ie, chrome์ด ํ๊ฒ์ธ ๊ฒฝ์ฐ promise๋ฅผ ์ฌ์ฉํ๋ฉด, promise ํด๋ฆฌํ์ import ํด์ผํ์ง๋ง, ์ด๋ chrome์๊ฒ๋ ๋ถํ์ํ๋ค.๋ฒ๋ค์ ํฌํจ์ํค๋ ๊ฒ๊น์ง ์ต์ ํ ํ๋ ค๋ฉด ๋ฐํ์ ๊ฒ์ฌ๊ธฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ User-agent ๊ธฐ๋ฐ ๊ฐ์ง๋ฅผ ํด์ผ ๋๋๋ฐ, ์ด๋ ๋ฆฌ์์ค๋ ์๊ฐ์ด ๋ง์ด ๋ ๋ค.
[Feature Request] Polyfill using dynamic import. ยท Issue #518 ยท zloirock/core-js
module,nomodule์ ์ง์ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ฒ๋ค๋ง์ ๋๋ ์ต์ ํํ๋ ๋ฐฉ๋ฒ๋์๋ค.