Strict Mode

Strict Mode

  • ES5๋ถ€ํ„ฐ ์ถ”๊ฐ€
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์„ ๋ณด๋‹ค ์—„๊ฒฉํžˆ ์ ์šฉํ•˜์—ฌ ๊ธฐ์กด์—๋Š” ๋ฌด์‹œ๋˜๋˜ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ฑฐ๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ์ตœ์ ํ™” ์ž‘์—…์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋ช…์‹œ์ ์ธ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด

Strict Mode์˜ ์ ์šฉ

  • ์ „์—ญ์˜ ์„ ๋‘ ๋˜๋Š” ํ•จ์ˆ˜์˜ ์„ ๋‘์— 'use strict';๋ฅผ ์ถ”๊ฐ€
    • ์ „์—ญ์˜ ์„ ๋‘์— ์ถ”๊ฐ€ํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ ์ „์ฒด์— strict mode๊ฐ€ ์ ์šฉ๋œ๋‹ค.
"use strict";

function foo() {
  x = 10; // ReferenceError: x is not defined
}
console.log(foo());
  • ํ•จ์ˆ˜์— Strict Mode๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜ ์ฒ˜์Œ์— 'use strict';์ถ”๊ฐ€
function foo() {
  "use strict";

  x = 10; // ReferenceError: x is not defined
}
foo();

Strict Mode์˜ ํŠน์ง•

  • ๊ธฐ์กด์— ์กฐ์šฉํžˆ ๋ฌด์‹œ๋˜๋˜ ์—๋Ÿฌ๋“ค์„ throwing ํ•จ
  • ์‹ค์ˆ˜๋กœ ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ
  • ์ „์ฒด ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ๋ถ€๋ถ„ ํ•จ์ˆ˜์— ์ ์šฉ ๊ฐ€๋Šฅ
  • {} ๊ด„ํ˜ธ๋กœ ๋ฌถ์—ฌ์ง„ block๋ฌธ, context์— ์ ์šฉ๋˜์ง€ ์•Š์Œ
  • JavaSCript ์—”์ง„์˜ ์ตœ์ ํ™” ์ž‘์—…์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ์‹ค์ˆ˜๋ฅผ ๋ฐ”๋กœ ์žก์Œ. ์ข…์ข… strict Mode(์—„๊ฒฉ ๋ชจ๋“œ)๋Š” sloppy mode(๋Š์Šจํ•œ ๋ชจ๋“œ)์˜ ๋™์ผํ•œ ์ฝ”๋“œ๋ณด๋‹ค ๋” ๋นจ๋ฆฌ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ง
  • strict Mode๋Š” ECMAScrpt์˜ ์ฐจ๊ธฐ ๋ฒ„์ „๋“ค์—์„œ ์ •์˜๋  ๋ฌธ๋ฒ•์„ ๊ธˆ์ง€
    • strict Mode์—์„œ์˜ ์‹๋ณ„์ž ํ›„๋ณด๋“ค์€ ์˜ˆ์•ฝ์–ด(implements, interface, let, package, private, protected, public, static, yield)๊ฐ€ ๋จ
    • ๊ทธ๋Ÿผ, strict Mode์—์„œ๋Š” ์ด ์˜ˆ์•ฝ์–ด์™€ ๋˜‘๊ฐ™์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋ณ€์ˆ˜๋ช… ๋˜๋Š” ์•„๊ทœ๋จผํŠธ๋ช…์œผ๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
"use strict";

// ์“ธ ์ˆ˜ ์—†๋Š” ํ”„๋กœํผํ‹ฐ์— ํ• ๋‹น
var undefined = 5; // TypeError ๋ฐœ์ƒ
var Infinity = 5; // TypeError ๋ฐœ์ƒ

// ์“ธ ์ˆ˜ ์—†๋Š” ํ”„๋กœํผํ‹ฐ์— ํ• ๋‹น
var obj1 = {};
Object.defineProperty(obj1, "x", { value: 42, writable: false });
obj1.x = 9; // TypeError ๋ฐœ์ƒ

// getter-only ํ”„๋กœํผํ‹ฐ์— ํ• ๋‹น
var obj2 = {
  get x() {
    return 17;
  },
};
obj2.x = 5; // TypeError ๋ฐœ์ƒ

// ํ™•์žฅ ๋ถˆ๊ฐ€ ๊ฐ์ฒด์— ์ƒˆ ํ”„๋กœํผํ‹ฐ ํ• ๋‹น
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = "ohai"; // TypeError ๋ฐœ์ƒ

์ถœ์ฒ˜ : MDM