λ³μλ μ μΈμ μν΄ μμ±λκ³ ν λΉμ ν΅ν΄ κ°μ κ°λλ€. κ·Έλ¦¬κ³ μΈμ κ° μλ©Ένλ€. μλ©Έμ΄ μλλ€λ©΄ νλ² μ μΈλ λ³μλ νλ‘κ·Έλλ° μ’ λ£νμ§ μλ ν μμν λ©λͺ¨λ¦¬ 곡κ°μ μ μ νκ² λλ€.
λ³μλ μμ μ΄ μ μΈλ μμΉμμ μμ±λκ³ μλ©Ένλ€. μ μ λ³μμ μλͺ μ£ΌκΈ°λ μ ν리μΌμ΄μ μ μλͺ μ£ΌκΈ°μ κ°λ€. νμ§λ§ ν¨μ λ΄λΆμμ μ μΈλ μ§μ λ³μλ ν¨μκ° νΈμΆλλ©΄ μμ±λκ³ ν¨μκ° μ’ λ£νλ©΄ μλ©Έλλ€.
fuction foo() {
var x = "local";
console.log(x)/ // local
return x;
foo();
console.log(x); // ReferenceError: x is not defined
μ§μ λ³μ xλ foo ν¨μκ° νΈμΆλκΈ° μ΄μ κΉμ§λ μμ±λμ§ μλλ€. foo ν¨μλ₯Ό νΈμΆνμ§ μμΌλ©΄ ν¨μ λ΄λΆμ λ³μ μ μΈλ¬Έμ΄ μ€νλμ§ μκΈ° λλ¬Έμ΄λ€.
λ³μ μ μΈμ μ μΈλ¬Έμ΄ μ΄λμ μλ μκ΄ μμ΄ κ°μ₯ λ¨Όμ μ€νλλ€. λ€μ λ§ν΄, λ³μ μ μΈμ μ½λκ° ν μ€μ© μμ°¨μ μΌλ‘ μ€νλλ μμ μΈ λ°νμμ μ€νλλ κ²μ΄ μλλΌ λ°νμ μ΄μ λ¨κ³μμ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ λ¨Όμ μ€νλλ€. κ·Έλ°λ° μλ°ν λ§νμλ©΄ μ μ€λͺ μ μ μ λ³μμ νμ
ν¨μ λ΄λΆμμ μ μΈν λ³μλ ν¨μκ° νΈμΆλμκ³ ν¨μ λͺΈμ²΄μ μ½λκ° ν μ€μ© μμ°¨μ μΌλ‘ μ€νλκΈ° μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ λ¨Όμ μ€νλλ€. μ¦, μ§μ λ³μμ μλͺ μ£ΌκΈ°λ ν¨μ μλͺ μ£ΌκΈ°μ μΌμΉνλ€.
var x = "global";
function foo() {
console.log(x); // undefined
var x = "local";
}
foo();
console.log(x); // global
ν¨μκ° νΈμΆλ μ§ ν, ν¨μ λ΄λΆμ μ§μ λ³μλ μ μΈλμκ³
undefined
λ‘ μ΄κΈ°νλμ΄ μλ€. λ³μ ν λΉλ¬Έμ΄ μ€νλκΈ° μ΄μ κΉμ§λundefined
κ°μ κ°λλ€.
νΈμ΄μ€ν
μ μ€μ½νλ₯Ό λ¨μλ‘ λμνλ€. μ¦,νΈμ΄μ€ν
μ λ³μ μ μΈμ΄ μ€μ½νμ μ λλ‘ λμ΄ μ¬λ €μ§ κ²μ²λΌ λμνλ μλ°μ€ν¬λ¦½νΈ κ³ μ μ νΉμ§μ λ§νλ€.
λΈλΌμ°μ νκ²½μμ μ μ κ°μ²΄λ
window
var ν€μλλ‘ μ μΈν μ μ λ³μλ μ μ κ°μ²΄window
μ νλ‘νΌν°λ€. μ μ κ°μ²΄window
λ μΉνμ΄μ¦λ₯Ό λ«κΈ° μ κΉμ§ μ ν¨νλ€.
λ°λΌμ λΈλΌμ°μ νκ²½μμ var ν€μλλ‘ μ μΈν μ μ λ³μλ μΉνμ΄μ§λ₯Ό λ«μ λκΉμ§ μ ν¨νλ€. μ¦, var ν€μλλ‘ μ μΈν μ μ λ³μμ μλͺ μ£ΌκΈ°λ μ μ κ°μ²΄μ μλͺ μ£ΌκΈ°μ μΌμΉνλ€.
π‘ μ μ κ°μ²΄λ ?
μ μ κ°μ²΄λ μ½λκ° μ€νλκΈ° μ΄μ λ¨κ³μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ΄λ€ κ°μ²΄λ³΄λ€λ λ¨Όμ μμ±λλ νΉμν κ°μ²΄λ€. μ μ κ°μ²΄λ ν΄λΌμ΄μΈνΈ μ¬μ΄λ νκ²½(λΈλΌμ°μ )μμλ
window
, μλ² μ¬μ΄λ νκ²½(Node.js)μμλglobal
κ°μ²΄λ₯Ό μλ―Ένλ€. νκ²½μ λ°λΌ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ€μν μλ³μ(window, self, this, franes, global)κ° μ‘΄μ¬νμΌλ ES11(ECMAScipt 11)μμglobalThis
λ‘ ν΅μΌ λμλ€.
μ μ κ°μ²΄λ νμ€ λΉνΈμΈ κ°μ²΄(Object, String, Number, Function, Array...)μ νκ²½μ λ°λ₯Έ νΈμ€νΈ κ°μ²΄(ν΄λΌμ΄μΈνΈ Web API λλ Node.jsμ νΈμ€νΈ API), κ·Έλ¦¬κ³ var ν€μλλ‘ μ μΈν μ μ λ³μμ μ μ ν¨μλ₯Ό νλ‘νΌν°λ‘ κ°λλ€.
βοΈ μ묡μ κ²°ν©
βοΈ κΈ΄ μλͺ μ£ΌκΈ°
βοΈ μ€μ½ν μ²΄μΈ μμμ μ’ μ μ μ‘΄μ¬
βοΈ λ€μμ€νμ΄μ€ μ€μΌ
(function () {
var foo = 10;
}());
console.log(foo); // ReferenceError: foo is not defined
var MYAPP = {}; // μ μ λ€μμ€νμ΄μ€ κ°μ²΄
MYAPP.person = {
name = "noh",
address = "Seoul"
};
console.log(MYAPP.person.name); // noh
var Counter = (function () {
// private λ³μ
var num = 0;
// μΈλΆλ‘ 곡κ°ν λ°μ΄ν°λ λ©μλλ₯Ό νλ‘νΌν°λ‘ μΆκ°ν κ°μ²΄λ₯Ό λ°ν.
return {
increase() {
return ++num;
},
decrease() {
return --num;
}
};
}());
// private λ³μλ μΈλΆλ‘ λ
ΈμΆλμ§ μλλ€.
console.log(Counter.num) // undefined
console.log(Counter.increase()) // 1
console.log(Counter.increase()) // 2
console.log(Counter.decrease()) // 1
console.log(Counter.decrease()) // 0
<script type="module" sce="lib.mjs"></script>