λ³μλ ? μλ£λ₯Ό μμ μ μ₯νλ 곡κ°
μ€λΈμ νΈ, μ΄λ μ΄, ν¨μ λ± λͺ¨λ μλ£λ€μ λ΄μ μ μλ€.
var name = 'kim'
var name μ΄λΌλ λΆλΆμ μ μΈ, name = 'kim'μ ν λΉνλ€κ³ νννλ€.
λ³μλ var, let, constλΌλ 3κ° ν€μλλ₯Ό μ΄μ©νλ€.
3κ°μ ν€μλλ μ μΈ, ν λΉ, λ²μμμ μ°¨μ΄κ° μλ€.
μ¬μ μΈ O / μ¬ν λΉ O / λ²μ function
var name = 'kim';
var name = 'park'; // μ¬μ μΈκ°λ₯
name = 'lee' // μ¬ν λΉκ°λ₯
function test(){
var name = 'kim';
console.log(name); // 'kim'μΆλ ₯
}
console.log(name); // μλ¬
var λ³μλ function λ΄μμ λ§λ€λ©΄ function λ΄μμλ§ μΈ μ μλ€.
μ¬μ μΈ x / μ¬ν λΉ O / λ²μ {μ€κ΄νΈ}
let name = 'kim';
let name = 'park'; // μλ¬ μ¬μ μΈλΆκ°
name = 'lee' // μ¬ν λΉκ°λ₯
if ( 1 == 1 ){
let age = '20';
console.log(age); // '20' μΆλ ₯
}
console.log(age); //μλ¬
let λ³μλ μ€κ΄νΈ (for, if, function λ±) μμμ λ§λ€λ©΄ μ€κ΄νΈ λ΄μμλ§ μΈ μμλ€.
μ¬μ μΈ x / μ¬ν λΉ X / λ²μ {μ€κ΄νΈ}
const name = 'kim';
const name = 'park'; // μλ¬ μ¬μ μΈ λΆκ°
name = 'lee' // μλ¬ μ¬ν λΉ λΆκ°
if ( 1 == 1 ){
const age = '20';
console.log(age); // '20' μΆλ ₯
}
console.log(age); //μλ¬
constλ constantμ μ½μλ‘(μμ, λ³νμ§ μλ κ°) μ¬μ μΈ, μ¬ν λΉμ΄ λΆκ°νλ€.
letκ³Ό λ§μ°¬κ°μ§λ‘ μ€κ΄νΈμμμ λ§λ€λ©΄ μ€κ΄νΈ λ΄μμλ§ μΈ μμλ€.
π€ const λ³μμ μ€λΈμ νΈλ₯Ό λ΄μΌλ©΄?
const object = { name : 'Kim' }
object.name = 'Park'; //κ°λ₯
const λ³μμ μ€λΈμ νΈλ₯Ό λ΄μΌλ©΄ μ€λΈμ νΈ λ΄μ λ°μ΄ν°λ λ³κ²½ κ°λ₯νλ€.
μλ°ν λ°μ§λ©΄ λ³μ μ체λ₯Ό μ¬ν λΉ νκ²μ΄ μλ μ€λΈμ νΈ λ΄λΆ κ°μ λ³κ²½ν κ²
const object = { name : 'Kim' };
Object.freeze(object);
object.name = 'Park'; //λ³κ²½λμ§ μμ
μμ λ³κ²½λΆκ°λ₯ν μ€λΈμ νΈλ₯Ό λ§λ€κ³ μΆλ€λ©΄ Object.freeze() μ¬μ©
νμ§λ§ μ€λΈμ νΈ λ΄μ μ€λΈμ νΈκΉμ§ freezeν΄μ£Όμ§ μλλ€.
λ³μ, ν¨μμ μ μΈμ λ³μ λ²μ, ν¨μ λ²μ 맨μλ‘ λκ³ μ€λ νμ
// λ³μμ μΈ
var name = 'Kim';
//μλ°μ€ν¬λ¦½νΈκ° ν΄μνλ μμ
var name;
name = 'Kim';
var λΏλ§ μλλΌ let, constλ‘ λ§λ€μ΄λ hoistingνμμ΄ μΌμ΄λμ§λ§ μ½κ°μ μ°¨μ΄κ° μλ€.
//μμ 1
console.log(name); // undefined
var name = 'kim';
//μμ 2
console.log(name); // μλ¬
let name = 'kim';
undefinedλ λ³μκ° μ μΈ λμλλ° κ°μ΄ ν λΉλμ§ μμμ λ μΆλ ₯λλ μΌμ’
μ μλ£ν
var λ³μλ hoisting μ undefinedκ° ν λΉλλ€.
let, const λ³μλ hoisting λμ§λ§ var λ³μμ²λΌ μ§λμΌλ‘ undefined κ° ν λΉλμ§ μλλ€.(temporal deadzone / uninitialized)
λ³μμ νΉμ§μ λ°κΉ₯μ μλ λ³μλ μμͺ½μμ μμ λ‘κ² μ°Έμ‘° κ°λ₯νλ€. (closure)
var age = 20
function ν¨μ(){
console.log(age) //μ°Έμ‘°
}
ν¨μ(); // 20 μΆλ ₯
μ μλ³μλ λͺ¨λ ν¨μλ ifλ¬Έ, forλ¬Έ λ΄λΆμμ 곡ν΅μ μΌλ‘ μ¬μ©ν μ μλ (μ°Έμ‘°ν μ μλ) μ μ©ν λ³μλ₯Ό λ»νλ€.
var ν€μλλ μ μλ³μλ₯Ό λ§λ€λ©΄ windowμ 보κ΄λλ€. (μ μ ν¨μλ windowμ μλμΌλ‘ 보κ΄λλ€.)
var age = 20;
console.log(age); // 20 μΆλ ₯
console.log(window.age) // λκ°μ΄ 20 μΆλ ₯
μ μλ³μλ₯Ό μ‘°κΈ λ μ격νκ² κ΄λ¦¬νκ±°λ ꡬλΆμ§κ³ μΆμΌλ©΄ windowλ₯Ό νμ©νλ€.
window.age = 20; //μ μλ³μλ§λ€κΈ°
console.log(window.age); //μ μλ³μμ¬μ©νκΈ°
window.age = 30; //μ μλ³μλ³κ²½νκΈ°