ํฐ์คํ ๋ฆฌ ๋ทฐ
[JavaScript] strict mode
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 7. 24. 20:03strict mode๋?
ES5๋ถํฐ ์ถ๊ฐ๋ strict mode(์๊ฒฉ ๋ชจ๋)๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด์ ๋ฌธ๋ฒ์ ์ข๋ ์๊ฒฉํ ์ ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ๊ฐ๋ฅ์ฑ์ด ๋๊ฑฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ต์ ํ ์์ ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ ์ฝ๋์ ๋ํด ๋ช ์์ ์ธ ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ ๊ธฐ๋ฅ์ ๋๋ค.
์ค๋ฅ๋ฅผ ์ค์ฌ ์์ ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ํด๊ฒฐ์ฑ ์ผ๋ก, ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ด๋ ค์ด ๊ฐ๋ฐ ํ๊ฒฝ์ธ strict mode๋ฅผ ๋ง๋ค๊ณ ๊ทธ ํ๊ฒฝ์์ ๊ฐ๋ฐํ๋ ๊ฒ์ ๋๋ค.
*ESLint : ์ ์ ๋ถ์๊ธฐ๋ฅ์ ํตํด ์์ค์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ์์ค์ฝ๋๋ฅผ ์ค์บํ์ฌ ๋ฌธ๋ฒ์ ์ค๋ฅ๋ฟ๋ง ์๋๋ผ ์ ์ฌ์ ์ค๋ฅ๊น์ง ์ฐพ์๋ด๊ณ ์ค๋ฅ์ ์์ธ์ ๋ฆฌํฌํ ํด์ฃผ๋ ์ ์ฉํ ๋๊ตฌ. ๋ฆฐํธ ๋๊ตฌ๋ฅผ ํ์ฉํ๋ฉด strict mode์ ์ ์ฌํ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ด ์ค์ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ESLint ๋๊ตฌ ์ฌ์ฉ์ด ์ ํธ๋จ
strict mode์ ์ ์ฉ
์ ์ญ์ ์ ๋ ๋๋ ํจ์ ๋ชธ์ฒด ์ ๋์ 'use strict'; ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ์ ์ญ์ ์ ๋์ ์ถ๊ฐ : ์คํฌ๋ฆฝํธ ์ ์ฒด์ strict mode๊ฐ ์ ์ฉ
- ํจ์ ๋ชธ์ฒด ์ ๋์ ์ถ๊ฐ : ํด๋น ํจ์์ ์ค์ฒฉ ํจ์์ strict mode๊ฐ ์ ์ฉ
'use strict';
function foo() {
x = 10; // ReferenceError
}
foo();
์ ์ญ์ strict mode๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ํผํ์
์ ์ญ์ ์ ์ฉํ strict mode๋ ์คํฌ๋ฆฝํธ ๋จ์๋ก ์ ์ฉ๋ฉ๋๋ค. strict mode ์คํฌ๋ฆฝํธ์ non-strict mode ์คํฌ๋ฆฝํธ๋ฅผ ํผ์ฉํ๋ ๊ฒ์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ์๋ ์๊ณ , ํนํ ์ธ๋ถ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ non-strict mode์ธ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฆ์ ์คํ ํจ์๋ก ์คํฌ๋ฆฝํธ ์ ์ฒด๋ฅผ ๊ฐ์ธ์ ์ค์ฝํ๋ฅผ ๊ตฌ๋ถํ๊ณ ์ฆ์ ์คํ ํจ์ ์ ๋์ strcit mode๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค.
// ์ฆ์ง ์คํ ํจ์์ ์ ๋์ strict mode ์ ์ฉ
(function () {
'use strict';
//Do something...
}());
ํจ์ ๋จ์๋ก strict mode๋ฅผ ์ ์ฉํ๋ ๊ฒ๋ ํผํ์
strict mode๊ฐ ์ ์ฉ๋ ํจ์๊ฐ ์ฐธ์กฐํ ํจ์ ์ธ๋ถ์ ์ปจํ ์คํธ์ strict mode๋ฅผ ์ ์ฉํ์ง ์๋๋ค๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. strict mode ํจ์์ non-strict mode ํจ์๋ฅผ ํผ์ฉํ๋ ๊ฒ์ ๋ฐ๋์ง ํ์ง ์๊ณ , ๋ํ ๋ชจ๋ ํจ์์ ์ผ์ผ์ด strict mode๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋กญ๊ธฐ ๋๋ฌธ์ ์ฆ์ ์คํ ํจ์๋ก ๊ฐ์ผ ์คํฌ๋ฆฝํธ ๋จ์๋ก ์ ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค.
strcit mode๊ฐ ๋ฐ์์ํค๋ ์๋ฌ
๋ค์์ strict mode๋ฅผ ์ ์ฉํ์ ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๋ํ์ ์ธ ์ฌ๋ก์ ๋๋ค.
์ฌ๋ก | ๋ฐ์ ์๋ฌ | ์ค๋ช |
์๋ฌต์ ์ ์ญ | ReferenceError | ์ ์ธํ์ง ์์ ๋ณ์๋ฅผ ์ฐธ์กฐ |
๋ณ์, ํจ์, ๋งค๊ฐ๋ณ์ ์ญ์ | SyntaxError | delete ์ฐ์ฐ์๋ก ๋ณ์, ํจ์, ๋งค๊ฐ๋ณ์๋ฅผ ์ญ์ |
๋งค๊ฐ๋ณ์ ์ด๋ฆ ์ค๋ณต | SyntaxError | ์ค๋ณต๋ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ์ฌ์ฉ |
with ๋ฌธ ์ฌ์ฉ | SyntaxError | with ๋ฌธ์ ๋์ผํ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ๋ฐ๋ณตํด์ ์ฌ์ฉํ ๋ ๊ฐ์ฒด ์ด๋ฆ์ ์๋ตํ ์ ์์ด ์ฝ๋๊ฐ ๊ฐ๋จํด์ง์ง๋ง ๊ฐ๋ ์ฑ์ด ๋๋น ์ง๋ ๋ฌธ์ ๊ฐ ์์ |
(function () {
'use strict';
// ์๋ฌต์ ์ ์ญ
x = 1;
console.log(x); // ReferenceError
// ๋ณ์ ์ญ์
var a = 1;
delete a; // SyntaxError
// ๋งค๊ฐ๋ณ์ ์ด๋ฆ ์ค๋ณต
// SyntaxError
function foo(x, x) {
return x + x;
}
console.log(foo(1,2));
// with ๋ฌธ ์ฌ์ฉ
// SyntaxError
with({y: 1}) {
console.log(y);
}
}());
strict mode ์ ์ฉ์ ์ํ ๋ณํ
์ผ๋ฐ ํจ์์ this
์์ฑ์ ํจ์๊ฐ ์๋ ์ผ๋ฐ ํจ์ ๋ด๋ถ์์๋ this๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ strict mode์์ ํจ์๋ฅผ ์ผ๋ฐ ํจ์๋ก์ ํธ์ถํ๋ฉด this์ undefined๊ฐ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค.
(function () {
'use strict';
function foo() {
console.log(this); // undefined
}
foo();
function Foo() {
console.log(this); // Foo
}
new Foo();
}());
arguments ๊ฐ์ฒด
strict mode์์๋ ๋งค๊ฐ๋ณ์์ ์ ๋ฌ๋ ์ธ์๋ฅผ ์ฌํ ๋นํ์ฌ ๋ณ๊ฒฝํด๋ arguments ๊ฐ์ฒด์ ๋ฐ์๋์ง ์์ต๋๋ค.
(function (a) {
'use strict';
// ๋งค๊ฐ๋ณ์์ ์ ๋ฌ๋ ์ธ์๋ฅผ ์ฌํ ๋นํ์ฌ ๋ณ๊ฒฝ
a = 2;
// ๋ณ๊ฒฝ๋ ์ธ์๊ฐ arguments ๊ฐ์ฒด์ ๋ฐ์X
console.log(arguments); // { 0:1, length: 1};
}(1));
[์ถ์ฒ] ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive
'JavaScript > ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] this (0) | 2022.07.26 |
---|---|
[JavaScript] ๋นํธ์ธ ๊ฐ์ฒด (0) | 2022.07.25 |
[JavaScript] ํ๋กํ ํ์ (0) | 2022.07.24 |
[JavaScript] ํจ์์ ์ผ๊ธ ๊ฐ์ฒด (0) | 2022.07.22 |
[JavaScript] ์์ฑ์ ํจ์์ ์ํ ๊ฐ์ฒด ์์ฑ (0) | 2022.07.22 |
- Total
- Today
- Yesterday
- git
- fp
- ์ ์ญ ๋ณ์
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- http
- ๋คํธ์ํฌ
- ํ๋กํ ์ฝ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์๋ฐ
- ์ด๋ถํ์
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- map
- ์๊ณ ๋ฆฌ์ฆ
- ์ฝ๋ฉํ ์คํธ
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ํฌํฌ์ธํฐ
- ๋ฐฑ์ค node.js
- ๋์์ธ ํจํด
- Baekjoon
- TDD
- ์นด์นด์ค ์ธํด
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- JavaScript
- ๋ ์์ปฌ ํ๊ฒฝ
- ์ด์์ฒด์
- ํ๋กํผํฐ
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ฐฑ์ค
- ๋ฐฑ์ค javascript
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |