ํ๊ตญ๋ง๋ก ํ๋ฉด ์๊ฒฉ๋ชจ๋์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ๋น์ฐํ๊ฒ ์ผ๋ฐ์ ์ผ๋ก ์คํ์ ํ๋ ๊ฒ์ ๋น-์๊ฒฉํ๊ฒ ์ฝ๋๋ฅผ ์คํํ๋ค๋ ๋ง์ฒ๋ผ ๋ค๋ฆฐ๋ค.
๋น-์๊ฒฉํ๊ฒ๋ผ๊ณ ํ๋ฉด ์ด๋ค ๊ฒ์ด๊ณ ์๊ฒฉํ๋ค๋ ๊ฒ์ ์ด๋ค ๊ฒ์ผ๊น?
๊ทธ๋ฆฌ๊ณ ์ ์ด๋ฐ๋ชจ๋๊ฐ ์๊ธฐ๊ฒ ๋ ๊ฒ์ผ๊น?
์๊ฒฉํ์ง ์๋ ๊ธฐ๋ณธ๊ฐ์ ๋์จํ ๋ชจ๋๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ์์ด๋ก๋
sloppy mode
๋ผ๊ณ ํ๋ค๊ณ ํ๋ค. (์๋์ฌ๋์ ๋ง์ง ์๊ฒ ์ง)
์๊ฒฉ๋ชจ๋๋ก ์คํ์ ํ๊ฒ ๋๋ฉด ๋ช๊ฐ์ง ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ค๊ณ ํ๋ค.
1. ๊ธฐ๋ณธ์๋ ์กฐ์ฉํ ๋ฌด์๋๋ ์๋ฌ๋ค์ `throwing` ํ๋ค.
2. JS์์ง์ ์ต์ ํ ์์
์ ์ด๋ ต๊ฒ ๋ง๋๋ ์ค์๋ค์ ๋ฐ๋ก ์ก๋๋ค.(๊ฐํ์ ์ผ๋ก ์๊ฒฉ๋ชจ๋์ ์ฝ๋๋ ๋น-์๊ฒฉ๋ชจ๋์ ๋์ผํ ์ฝ๋๋ณด๋ค ๋๋นจ๋ฆฌ ์๋ํ๋๋ก ๋ง๋ ๋ค๊ณ ํ๋ค.)
3. ์๊ฒฉ๋ชจ๋๋ `ECMAScript` ์ ์ฐจ๊ธฐ๋ฒ์ ๋ค์์ ์ ์๋ ๋ฌธ๋ฒ๋ค์ ๊ธ์งํ๋ค๊ณ ํ๋ค.
๋ณํ์ด ์ ํ๋ ํ๊ฒฝ์์ ๋์ํ๋๋ก ํ๊ณ ์ถ๋ค๋ฉด, ์๊ฒฉ ๋ชจ๋๋ก์ ๋ณํ(transitioning to strict mode)์ ์ฐธ๊ณ ํ์ธ์.
์๊ฒฉ๋ชจ๋๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ง๋ก ๊ฐ๋จํ๋ค. ์๋จ์ "use strict"
๋ฅผ ์ ์ผ๋ฉด ์ ์ฉ์ ํ ๊ฒ์ด๋ค. 'strict mode'
๋ ์ ์ฒด ์คํฌ๋ฆฝํธ ๋๋ ๋ถ๋ถ ํจ์์ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค. ๋จ {}
๊ดํธ๋ก ๋ฌถ์ฌ์ง ๋ธ๋ญ๋ฌธ์๋ ์ ์ฉ์ด ๋์ง ์๋๋ค. {}
๊ดํธ ์์ 'strict mode'
๋ฅผ ๋ฃ์ด๋ ๋์ํ์ง ์๋๋ค. eval
์ฝ๋, function
์ฝ๋, ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ฑ, windowTimters.setTimeout()
์ ๋๊ฒจ์ง ๋ฌธ์์ด ๋ค์ด ์ ์ฒด ์คํฌ๋ฆฝํธ์์ 'strict mode'
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋จผ์ ์ ์ฒด์คํฌ๋ฆฝํธ์ ์ ์ฉํ๊ธฐ ์ํด, ์ ํํ ๊ตฌ๋ฌธ "use strict"(๋๋ 'use strct')
๋ฅผ ๋ค๋ฅธ ๊ตฌ๋ฌธ ์์ฑ ์ ์ ์ฝ์
์ ํ๋ค.
// Whole-script strict mode syntax
'use strict';
var v = "Hi! I'm a strict mode script!";
์๊ฒฉ ๋ชจ๋์ ์คํฌ๋ฆฝํธ์ ๋น-์๊ฒฉ ๋ชจ๋์ ์คํฌ๋ฆฝํธ์ ์ฐ๊ฒฐ์ ์ฌ์ฌ์๊ณ ํ์๊ธฐ๋ฅผ ๋ฐ๋๋ค. ์์์ฒ๋ผ ํ๊ฒ๋๋ฉด ์ ์ฒด ์ฐ๊ฒฐ์ ์๊ฒฉ์ผ๋ก ๋ณด์ธ๋ค. ๋น-์๊ฒฉ๊ณผ ์๊ฒฉ์ ๊ฒฐํฉ์ ๋น-์๊ฒฉ์ผ๋ก ๋ณด์ธ๋ค. ์๊ฒฉ ๋ชจ๋์ ๋ค๋ฅธ ์๊ฒฉ๋ชจ๋ ๋ค์ ๊ฒฐํฉํ๋ ๊ฒ์ ๊ด์ฐฎ๊ณ ๋น-์๊ฒฉ ์คํฌ๋ฆฝํธ ์ฌ์ด์ ๊ฒฐํฉ๋ ๊ด์ฐฎ๋ค. ๋ค๋ง, ์๊ฒฉ๊ณผ ๋น-์๊ฒฉ์ ๊ฒฐํฉ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋๋ฌธ์ ํจ์์ ์ํ ํจ์ ๊ธฐ์ค์ ์๊ฒฉ ๋ชจ๋๋ฅผ ์ฐ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
์ ๋ช
ํ ์ด์๋ก ์๋ง์กด์์ ์ด๊ฑธ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์ด ์๋ค๊ณ ํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก, ํจ์์ strict mode
๋ฅผ ์ ์ฉํ๊ธฐ ์ํด, ํจ์ ๋ณธ๋ฌธ ์ฒ์์ ๋ค์์ ๊ตฌ๋ฌธ์ ๋ฃ์ต๋๋ค. "use strict";
(or 'use strict';
).
function strict() {
// ํจ์-๋ ๋ฒจ strict mode ๋ฌธ๋ฒ
'use strict';
function nested() { return "And so am I!"; }
return "Hi! I'm a strict mode function! " + nested();}function notStrict() { return "I'm not strict."; }
์์ธํ๊ฒ ๋ณด๋ ค๋ฉด MDN
์ ์ดํด๋ณด๋ ๊ฒ์ด ์ข์ ๋ฏํ๋ค.
"use strict"
๋ ES5์์ ์๋กญ๊ฒ ๋์จ directive
์ด๋ค. ์ค์ ์ํ ๋ฌธ์ฅ์ด ์๋๋ผ literal expression
์ด๊ธฐ ๋๋ฌธ์ ์ด์ ๋ฒ์ ์ JavaScript
์์๋ ๋ฌด์๋ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก JavaScript
์ฝ๋ ์ต ์๋จ์ ์ด "use strict"
๊ฐ ์์นํ๋๋ฐ ์ด ์๋ฏธ์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด ๋ดค์ต๋๋ค.
"use strict"
์ ๋ชฉ์ ์ ์ฐ๋ฆฌ์ ์ฝ๋๊ฐ strict mode
๋ก ์คํ๋๊ฒ ์ง์ํ๋ ๊ฒ์
๋๋ค. ์ฌ๊ธฐ์ ๋งํ๋ strict mode
๋ ํ๋ก๊ทธ๋จ ์คํ ์ ์์ธ๋ฅผ ๋ฐ์์ํฌ ๋งํ ๋ช๊ฐ์ง ํน์ดํ ๋์์ ์ํํ ์ ์๋๋ก ์๊ฒฉํ ์ ํ์ด ๊ฑธ๋ ค์๋ ์คํ context
๋ฅผ ์ง์นญํ๋ค. ์ฆ, ์ผ๋ฐ์ ์ผ๋ก ๋์ํ๋ ์ฝ๋๋ฅผ "use strict"
๋ฅผ ์ด์ฉํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๊ทธ ์ธ์ ์๋ก๋ ํจ์์ ๋งค๊ฐ๋ณ์์ ๋ฆฌ์คํธ์์ ์ค๋ณต๋ ๋ถ๋ถ์ด ์์ ๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ณ ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค๋ณตํด์ ๋ก๋ฉํ๋ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ๋ฐ์์ํต๋๋ค. (์๋ฅผ ๋ค๋ฉด, jQuerylibrary
์ค๋ณต๋ก๋ฉ )
๊ฒฐ๋ก ์ ์ผ๋ก ์ ์ฌ์ ์ธ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ ์ฌ์ง๋ฅผ ๋ง์์ฃผ๋๋ก ์ฝ๋์ ๋ํ ๋ฌธ๋ฒ ์ฌํญ์ ์๊ฑฑํ๊ฒ ์งํค๋๋ก ํ๋ directive
์ ๋๋ก ์ธ์ํ์๋ฉด ๋ ๋ฏ ํ๋ค.
- ์ ์ธํ์ง ์๊ณ ๋ณ์๋ฅผ ์ฌ์ฉ
- ๋ณ์, ํจ์, ๋งค๊ฐ๋ณ์๋ฅผ ์ญ์
- ๋์ผํ ํ๋กํผํฐ๋ฅผ ํ ๋ฒ ์ด์ ์ ์ธ
- ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ด ๋์ผ
- 8์ง๋ฒ์ ์ซ์ ๋ฆฌํฐ๋ด๊ณผ ํน์๋ฌธ์๋ฅผ ํ ๋น
- ์ฝ๊ธฐ์ ์ฉ์ ํ ๋นํ๋ ค ํ ๋
- ์ป๊ธฐ์ ์ฉ(get)์ ํ ๋นํ๋ ค ํ ๋
- ์ญ์ ๋ถ๊ฐ๋ฅํ ํ๋กํผํฐ๋ฅผ ์ญ์ ํ๋ ค๊ณ ํ ๋
with
ํค์๋๋ฅผ ์ฌ์ฉeval()
์ ์ฌ์ฉํ๋ ค ํ ๋