( es6๋? ECMA๋ผ๋ ๊ตญ์ ๊ธฐ๊ตฌ์์ ๋ง๋ ํ์ค๋ฌธ์์ธ ECMAScript(=ES)์ 6๋ฒ์งธ ๊ฐ์ ํ ๋ฌธ์์ ์๋ ํ์ค )
var๊ณผ let, const์ ์ฐจ์ด๋ฅผ ์ดํด๋ณด์!
var value = 'test1'
console.log(value) // test1 ์ถ๋ ฅ
var value = 'test2'
console.log(value) // test2 ์ถ๋ ฅ
๊ฐ๋ฐ์ ๋๊ตฌ๋ก ๋ณด๋ฉด chrome์ ๊ฒฝ์ฐ Uncaught SyntaxError: Identifier 'value' has already been declared ๋ผ๋ ์๋ฌ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๊ณ , IE์ ๊ฒฝ์ฐ SCRIPT1052: Let/Const ๋ค์ ์ ์ธ ์ด๋ผ๋ ์๋ฌ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๋ค.
์ฐธ๊ณ ๋ก let, const์ immutable์ฌ๋ถ๊ฐ ๋ค๋ฅด๋ค!
- let์ ๊ฒฝ์ฐ ๋ณ์์ ์ฌ์ ์ธ์ ๋ถ๊ฐ๋ฅํ๊ณ , ๋ณ์์ ์ฌํ ๋น์ ๊ฐ๋ฅํ๋ค.
let value = 'test1';
console.log(value); // test1 ์ถ๋ ฅ
value = 'test2';
console.log(value); // test2 ์ถ๋ ฅ
- const๋ ๋ณ์์ ์ฌ์ ์ธ, ๋ณ์์ ์ฌํ ๋น ๋ชจ๋ ๋ถ๊ฐ๋ฅํ๋ค.
const value = 'test1';
console.log(value); // test1 ์ถ๋ ฅ
value = 'test2';
console.log(value); // Uncaught TypeError: Assignment to constant variable.
SyntaxErrorr๊ฐ ๋ฐ์ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ๋ var, let, const, function, class ๋ฑ์ ๋ชจ๋ ํธ์ด์คํ
์ด ๋๋ค. var์ ๊ฒฝ์ฐ ํธ์ด์คํ
๋ ๋ ์ด๊ธฐ ๊ฐ์ด ์์ผ๋ฉด ์๋์ผ๋ก undefined๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ์ ์ธ ์ ์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
๋ฐ๋ฉด let, const์ ๊ฒฝ์ฐ ์ด๊ธฐ ๊ฐ์ด ์์ ๋ var์ฒ๋ผ ์๋์ผ๋ก ํ ๋นํ์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๋ฅผ ๋ฐ์ํ๋ค.
console.log(value1); // undefined
var value1;
console.log(value2); // Error: Uncaught ReferenceError: value2 is not defined
let value2;
consol.log(value3); //Uncaught SyntaxError: Missing initializer in const declaration
const value3;
์ฆ, var๋ ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ํ๋ฒ์ ์ด๋ฃจ์ด์ง๋ฉฐ, let์ ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ๋ถ๋ฆฌ๋์ด ์งํ๋๋ค. ์๋ ์์๋ฅผ ์ฐธ์กฐํ์!
๋ณ์๊ฐ ์ ์ธ๋๊ณ ํด๋น ๋ณ์์ ๊ฐ์ด ํ ๋น๋๊ธฐ ์ ๊น์ง๋ฅผ TDZ(Temporal Dead Zone)๋ผ๊ณ ํ๋ฉฐ, ๋ณ์๋ ์ ์ธ ๋จ๊ณ -> ์ด๊ธฐํ ๋จ๊ณ -> ํ ๋น ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์์ฑ๋๋ค.
//์ ์ธ๋จ๊ณ์, ์ด๊ธฐํ ๋จ๊ฒ๊ฐ ๋์์ ์ด๋ฃจ์ด์ ธ, ๋ณ์ ์ ์ธ ์ด์ ์ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
console.log(value) // undefined ์ถ๋ ฅ
var value;
console.log(value) // undefined ์ถ๋ ฅ
value = 'test1'; //ํ ๋น ๋จ๊ณ
console.log(value) // test1 ์ถ๋ ฅ
////////////////////////////////////////////////////
//์ ์ธ ๋จ๊ณ๋ง ์คํ๋์ด ์์ง ๋ณ์๊ฐ undefined๋ก ์ด๊ธฐํ ๋์ง ์์ ๋ณ์ ์ ์ธ๋ฌธ ์ด์ ์ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
console.log(value) // ReferenceError: value is not defined
let value; //์ด๊ธฐํ ๋จ๊ณ ์คํ
console.log(value) // undefined ์ถ๋ ฅ
value = 'test1'; //ํ ๋น ๋จ๊ณ
console.log(value) // test1 ์ถ๋ ฅ
๊ฒฐ๋ก !
var๋ hosting๊ณผ scope๋ฅผ ๊ณ ๋ คํ์ฌ ์ฝ๋ฉํด์ผํ๊ณ , ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ํ ๋ฐ ์์ธกํ๊ธฐ ์ด๋ ค์ด ์ํฉ์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ฌํ ๋น์ด ํ์ํ ๊ฒฝ์ฐ์ let์ ์ฌ์ฉํ๊ณ , ์ฌํ ๋น์ด ํ์์๋ ์์์ ๊ฐ์ฒด๋ const๋ฅผ ์ฌ์ฉํด์ผ๊ฒ ๋ค.
var | let | const | |
grobal scope | yes | no | no |
script scope | no | yes | yes |
function local scope | yes | yes | yes |
block scope | no | yes | yes |
์ฌ์ ์ธ | yes | no | no |
์ฌํ ๋น | yes | yes | no |
scope๋ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์์ธํ๊ฒ ํ์ธ ๊ฐ๋ฅํ๋ฏ๋ก ๊ฐ๋ฐ์ ๋๊ตฌ์์ ๋๋ฒ๊น ํด๋ณด์!
'๊ฐ๋ฐ > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Ajax] ํ์ผ file ๋ค์ด๋ก๋ ๋ฐ๊ธฐ (6) | 2021.11.30 |
---|
๋๊ธ