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