์๊ฒฉ ๋ชจ๋! ์๊ฐ๋ณด๋ค ์ต์ํ ์ฃผ์ ๋ค์ ๐๐ปโโ๏ธ
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋น์๊ฒฉ ๋ชจ๋๋ก ๊ฐ๋ฐํ ์ ๊ดด์ํ ์ผ๋ค์ด ์ ~๋ง ๋ง์ด ๋ฒ์ด์ง๋๋ค.
์ ์ธํ์ง ์์ ๋ณ์๋ฅผ ๋ฑ๋กํ ๋ ์๋ฌต์ ์ผ๋ก ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋ค์ ์ฝ๋๋ ์๋ฌ๋ฅผ ๋ฐ์ํ์ง ์์ต๋๋ค!
function test() {
NO_DECLARE_VAR = 'test';
}
console.log(NO_DECLARE_VAL); // test
์ ์๊ฐํด๋ณด๋ฉด ์๋ฌต์ ์ ์ญ์์ ํ์๋ ๋ฌธ์ ์์.
๊ฒฐ๊ตญ ์๋ฌต์ ์ ์ญ์ ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ํ ๋นํ๋ ๊ฑฐ์ฃ ?
๋ฐ๋ผ์ delete
๋ก ๋ณ์, ํจ์๋ฅผ ์ญ์ ํ ์๋ ์๋ต๋๋ค. ํํ... ๐ญ
๋งค๊ฐ๋ณ์๋ ์๋ฐํ ๋งํ์๋ฉด ํจ์ ๋ด๋ถ์์ ์กด์ฌํ๋ ์ง์ญ ๋ณ์์ด๋ฏ๋ก ์ญ์ ๊ฐ ๋์ง๋ ์์ต๋๋ค๋ง, ์๋ฌ๋ฅผ ๋ฐ์์ํค์ง ์๋๋ค๋ ์ ์ ๊ฐ๋ฐ์๋ค ๊ฐ์ ์ฝ๋ ๋ถ์์ ํท๊ฐ๋ฆฌ๊ฒ ํ๋ ์์๊ธฐ๋ ํ์ฃ !
function test() {
a = 1;
delete a;
}
console.log(a) // Reference Error: a is not defined
์ด๊ฑด ์ ๋ ๋ชฐ๋๋๋ฐ์!
๋งค๊ฐ ๋ณ์ ์ด๋ฆ์ด ์ค๋ณต๋๋ ์๋ฌ๊ฐ ๋์ง ์๋๊ตฐ์?!
์ด๋์ ๋งค๊ฐ ๋ณ์๋ ์ค๋ณต๋ ์ด๋ฆ ์ค ๋ง์ง๋ง ์ธ์์ ์ ์ฉ๋๋ต๋๋ค!
function foo(x, x) {
console.log(x)
}
foo(3,4)
with
... ์๋ฌด๋๋ ์ด๋ค ๋ณ์๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ด ์ณ์์ง๋ฅผ ํ๋จํ๊ธฐ๊ฐ ์ ๋งคํด์ ๋์ด์ ์ฌ์ฉํ์ง ์์ฃ .
ํ์ง๋ง ๋น์๊ฒฉ ๋ชจ๋๋ with
๋ ์ธ์ ๋ ์ง ํ์์
๋๋ค! ๐๐ป
function test(arg) {
with(arg) {
console.log(arg)
}
};
test({ arg: 'test!' });
// result value: test!;
// expected value: { arg: 'test!' }๋ฅผ ๋ฐํํด์ผ ํจ.
arguments
๊ฐ์ฒด๋งค๊ฐ๋ณ์๊ฐ ๋ณ๊ฒฝ๋ ๋, arguments
์ ๊ฐ๋ ๋ฐ๋๊ฒ ๋๋ค๋ ์ฌ์ค! ์๊ณ ๊ณ์
จ๋์? ๐
function test(a) {
a = 3
console.log(arguments)
}
test(1); // [Arguments] { '0': 3 }
์ด๋ฐ ๋ฌธ์ ๋ค ๋๋ฌธ์ ์๊ฒฉ ๋ชจ๋๋ ์ฌ์ฉ๋๊ณ ์์ด์!
ํจ์ ๋ชธ์ฒด ๋ด๋ถ์ ๋งจ ์๋, ์ ์ญ ์ฝ๋์ ๋งจ ์์ strict mode
๋ฅผ ์ ์ธํด์ฃผ์ธ์. ๊ทธ๋ ๊ฒ ํ๋ค๋ฉด ์ง์ญ / ์ ์ญ์ผ๋ก ๋์ํ ์ ์์ด์. ๐
function test(a) {
a = 3
console.log(arguments)
}
test(1); // [Arguments] { '0': 1 }
์ค์ํ ๊ฑด,
use strict
๋ ํจ์ ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๋ฐ๋ฆ ๋๋ค. ๋ฐ๋ผ์ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ์์์ ์ค์ฝํ๋ ์ ์ฉ์ด ๋์ง ์๋๋ค๋ ์ ์ ์ ์ํ์ธ์!
{
"use strict";
function test(a) {
a = 3
console.log(arguments)
}
}
test(1); // [Arguments] { '0': 3 }
๋ค๋ง ์ด๋ฌํ use strict
๋ ์ ์ญ์์ ์ฌ์ฉํ๋ฉด ์จ๋ ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ non-strict mode
์ผ ๊ฒฝ์ฐ์ ์์น ์๋ ์ํฅ์ ์ฃผ๊ธฐ๋ ํด์.
๋ฐ๋ผ์ ์ง์ญ์ ์ผ๋ก ์ฐ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
๐ ์, ๊ณ์ ํจ์ ์ธ ๋๋ง๋ค ๋น์๊ฒฉ ๋ชจ๋๋ฅผ ์ ์ธํ๋ ๊ฑฐ ๋๋ฌด ๊ท์ฐฎ์๋ฐ์?!
๋ฐ๋ผ์ ์ ์ ๋ถ์ ๋๊ตฌ์ธ ๋ฆฐํฐ๋ฅผ ์ฌ์ฉํ์ฌ, ๊ท์น์ ์ ์ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํด์!
๋ํ์ ์ผ๋ก ESLint
๊ฐ ์๋ต๋๋ค ๐
์ฌ์ค ์๊ฐ๋ณด๋ค "use strict"
๋ฅผ ์ง์ ์ ์ผ๋ก ์จ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์๊ธด ํ๋ค์.
ESLint
๊ฐ ์๊ฐ๋ณด๋ค ๊ฐ๋ ฅํ๊ธฐ ๋๋ฌธ์
๋๋ค. (ESLint
์ ๋ฃฐ์ ์ด๊ธด๋ค๋ฉด ์๋ฌ๋ฅผ ๋ด๋ฑ๋๋ก ํ๋ ํ๋ฌ๊ทธ์ธ ๋ฑ์ ์ถ๊ฐํ๋ฉด ๋์ฑ ์์ ์ฑ ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ด์์ด ๊ฐ๋ฅํ๊ธฐ๋ ํด์!)
๊ทธ๋ฐ๋ฐ ๊ฐ๋, ๊ฐ๋จํ๊ฒ ํ
์คํธ๋ก ์ฝ๋๋ฅผ ์์ฑํ ๋ ESLint
๋ฅผ ์ ์ฉํ์ง ์์ ๋๊ฐ ์๋๋ฐ์, ์ด๋ด ๋์๋ ์ฌ์ฉํ๋ฉด ์ ์ฉํ ๊ฒ ๊ฐ์์. ์ด์!