๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

201107

ยท ์•ฝ 6๋ถ„

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(); // undefined
    function 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)์ด๋‹ค.

  • ๋ฐ”๋ฒจ์€ ์„ธ ๋‹จ๊ณ„๋กœ ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

    1. ํŒŒ์‹ฑ (Parsing) : ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์ถ”์ƒ ๊ตฌ๋ฌธํŠธ๋ฆฌ(AST)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋‹จ๊ณ„

    2. ๋ณ€ํ™˜ (Transforming) : ๋ฐ”๋ฒจ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋‹จ๊ณ„

    3. ์ถœ๋ ฅ (Printing) : ๋ณ€๊ฒฝ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ถœ๋ ฅํ•˜๋Š” ๋‹จ๊ณ„

  • ์ปดํŒŒ์ผ๋Ÿฌ๋กœ์จ ๋ฐ”๋ฒจ ํ”Œ๋Ÿฌ๊ทธ์ธ(๊ตฌ๋ฌธ ๋ณ€ํ˜•)๊ณผ ํด๋ฆฌํ•„์ด ํ•˜๋Š” ์ผ(๋‚ด์žฅ๋œ ํ•จ์ˆ˜/๊ฐ์ฒด ๊ตฌํ˜„ )์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

    • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

      ๊ตฌ๋ฌธ ๋ณ€ํ˜•์œผ๋กœ ์ด์ „ ๋ฒ„์ „์˜ ์ฝ”๋“œ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

      // ์ปดํŒŒ์ผ ์ „const sum = (a, b) => a + b;
      // ์ปดํŒŒ์ผ ํ›„'use strict';
      var sum = function sum(a, b) {    return a + b;};
    • Promise

      Promise ๋Š” 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 ๊ธฐ๋ฐ˜ ๊ฐ์ง€๋ฅผ ํ•ด์•ผ ๋˜๋Š”๋ฐ, ์ด๋Š” ๋ฆฌ์†Œ์Šค๋ž‘ ์‹œ๊ฐ„์ด ๋งŽ์ด ๋“ ๋‹ค.

        zloirock/core-js

        [Feature Request] Polyfill using dynamic import. ยท Issue #518 ยท zloirock/core-js

      • module , nomodule ์˜ ์ง€์› ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ฒˆ๋“ค๋ง์„ ๋‚˜๋ˆ  ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„์žˆ๋‹ค.

        Serve modern code to modern browsers for faster page loads