strict mode
strict mode ๋?
- ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด์ ๋ฌธ๋ฒ์ ์ข ๋ ์๊ฒฉํ ์ ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ๊ฐ๋ฅ์ฑ์ด ๋๊ฑฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ต์ ํ ์์
์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ ์ฝ๋์ ๋ํด ๋ช
์์ ์ธ ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
- ESLint ๊ฐ์ ๋ฆฐํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด๋ strict ๋ชจ๋์ ์ ์ฌํ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
- ๋ฆฐํธ ๋๊ตฌ๋ ์ ์ ๋ถ์ ๊ธฐ๋ฅ์ ํตํด ์์ค์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ์์ค์ฝ๋๋ฅผ ์ค์บํ์ฌ ๋ฌธ๋ฒ์ ์ค๋ฅ ๋ง์ด ์๋๋ผ ์ ์ฌ์ ์ค๋ฅ๊น์ง ์ฐพ์๋ด๊ณ ์ค๋ฅ์ ์์ธ์ ๋ฆฌํฌํ
ํด์ฃผ๋ ๋๊ตฌ์ด๋ค.
- ESLint์ฌ์ฉ๋ฐฉ๋ฒ
strict mode ์ ์ ์ฉ
- ์ ์ญ์ ์ ๋ ๋๋ ํจ์ ๋ชธ์ฒด์ ์ ๋์
'use scritct';
ํค์๋๋ฅผ ์ถ๊ฐํ์ฌ ์ฌ์ฉ
- ์ ์ญ์ ์ฌ์ฉ์ ์คํฌ๋ฆฝํธ ์ ์ฒด์
strict mode
์ ์ฉ
'use strict';
function foo() {
x = 10; // ReferenceError : x is not defined
}
foo();
์ ์ญ์ strict mode๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ํผํ์
- ์ ์ญ์ ์ ์ฉํ
strict mode
๋ ์คํฌ๋ฆฝํธ ๋จ์๋ก ์ ์ฉ๋จ
- ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ์ํฅ์ ์ฃผ์ง ์๊ธฐ ๋๋ฌธ์
strict mode
์ non strict-mode
๋ฅผ ํผ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ข์ง ์์
- ์ฆ์ ์คํ ํจ์๋ก ๊ฐ์ธ์ ํด๊ฒฐ ๊ฐ๋ฅ
strict mode๊ฐ ๋ฐ์ ์ํค๋ ์๋ฌ
์๋ฌต์ ์ ์ญ
- ์ ์ธํ์ง ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ฉด
Reference Error
(function () {
'use strict';
x = 1;
console.log(x); // ReferenceError: x is not defined
}());
๋ณ์, ํจ์ ,๋งค๊ฐ๋ณ์์ ์ญ์
- delete๋ก ๋ณ์, ํจ์, ๋งค๊ฐ๋ณ์๋ฅผ ์ญ์ ํ๋ฉด
SyntaxError
๊ฐ ๋ฐ์
(function () {
'use strict';
var x = 1;
delete x;
// SyntaxError: Delete of an unqualified identifier in strict mode.
function foo(a) {
delete a;
// SyntaxError: Delete of an unqualified identifier in strict mode.
}
delete foo;
// SyntaxError: Delete of an unqualified identifier in strict mode.
}());
๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ์ค๋ณต
- ์ค๋ณต๋ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ์ฌ์ฉํ๋ฉด
SyntaxError
๋ฐ์
(function () {
'use strict';
//SyntaxError: Duplicate parameter name not allowed in this context
function foo(x, x) {
return x + x;
}
console.log(foo(1, 2));
}());
๋๊ธ