ν°μ€ν 리 λ·°
[JavaScript] μ€μ½ν
κ°λ°κ°κ΅΄πΈ 2022. 7. 20. 15:20μ€μ½ν(Scope)λ?
μ€μ½νλ μ§μνμλ©΄ "λ²μ"λΌλ λ»μ΄κ³ , μλ°μ€ν¬λ¦½νΈμμμ μ€μ½νλ μλ³μκ° μ ν¨ν λ²μλ₯Ό λ»ν©λλ€.
λ³μ μ΄λ¦, ν¨μ μ΄λ¦, ν΄λμ€ μ΄λ¦ λ± λͺ¨λ μλ³μλ μμ μ΄ μ μΈλ μμΉμ μν΄ λ€λ₯Έ μ½λκ° μλ²½μ μμ μ μ°Έμ‘°ν μ μλ μ ν¨ λ²μκ° κ²°μ λλλ° μ΄ μ ν¨ λ²μκ° μ€μ½νμ λλ€.
// μ μ λ³μ
var x = 'global';
function foo() {
// μ§μ λ³μ
var x = 'local';
console.log(x); // "local"
}
console.log(x); // "global"
- μλ°μ€ν¬λ¦½νΈ μμ§μ μ΄λ¦μ΄ κ°μ λ κ°μ λ³μ μ€μμ μ΄λ€ λ³μλ₯Ό μ°Έμ‘°ν΄μΌ ν κ²μΈμ§ μλ³μ κ²°μ ν΄μΌν¨
- μ€μ½νλ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μλ³μλ₯Ό κ²μν λ μ¬μ©νλ κ·μΉ
- μ€μ½ν λ΄μμ μλ³μλ μ μΌν΄μΌν¨ (λ€λ₯Έ μ€μ½νμλ κ°μ μ΄λ¦μ μλ³μ μ¬μ© κ°λ₯, C++μ λ€μμ€νμ΄μ€μ λΉμ·ν¨)
μ€μ½νμ μ’ λ₯
λ³μμ κ°μ μλ³μλ μμ μ΄ μ μΈλ μμΉμ μν΄ μμ μ΄ μ ν¨ν λ²μμΈ μ€μ½νκ° κ²°μ λ©λλ€. μ΄λ μμΉλ μ μκ³Ό μ§μμΌλ‘ ꡬλΆν μ μμ΅λλ€.
κ΅¬λΆ | μ€λͺ | μ€μ½ν | λ³μ |
μ μ | - μ½λμ κ°μ₯ λ°κΉ₯ μμ - μ΄λμλ μ§ μ°Έμ‘° κ°λ₯ |
μ μ μ€μ½ν | μ μ λ³μ |
μ§μ | - ν¨μ λͺΈμ²΄ λ΄λΆ - μμ μ μ§μ μ€μ½νμ νμ μ§μ μ€μ½νμμ μ ν¨ |
μ§μ μ€μ½ν | μ§μ λ³μ |
μ€μ½ν 체μΈ
μλ°μ€ν¬λ¦½νΈ μμ§μ μ€μ½ν 체μΈμ ν΅ν΄ μ°Έμ‘°ν λ³μλ₯Ό κ²μν©λλ€. μ€μ½νλ ν¨μμ μ€μ²©μ μν΄ κ³μΈ΅μ ꡬ쑰λ₯Ό κ°λλ°, μ΄λ κ² κ³μΈ΅μ μΌλ‘ μ°κ²°λ κ²μ μ€μ½ν 체μΈμ΄λΌ ν©λλ€. λ³μλ₯Ό μ°Έμ‘°ν λ μλ°μ€ν¬λ¦½νΈ μμ§μ μ€μ½ν 체μΈμ ν΅ν΄ λ³μλ₯Ό μ°Έμ‘°νλ μ½λμ μ€μ½νμμ μμνμ¬ μμ μ€μ½ν λ°©ν₯μΌλ‘ μ΄λνλ©° μ μΈλ λ³μλ₯Ό κ²μν©λλ€.
// μ μ μ€μ½ν
var x = "global x";
var y = "global y";
function outer() {
// μ§μ μ€μ½ν
var z = "outer's local z";
console.log(x); // "global x"
console.log(y); // "global y"
console.log(z); // "outer's local z"
function inner() {
var x = "inner's local x";
console.log(x); // "inner's local x"
console.log(y); // "global y"
console.log(z); // "outer's local z"
}
inner();
}
outer();
console.log(x); // "global x"
console.log(z); // ReferenceError
μμ μ½λμ μ€μ½ν 체μΈμ κ·Έλ¦ΌμΌλ‘ νννλ©΄ λ€μκ³Ό κ°μ΅λλ€.
- μ κ·Έλ¦Όκ³Ό μ μ¬ν μλ£κ΅¬μ‘°μΈ *λ μ컬 νκ²½μ μ€μΈλ‘ μμ± (물리μ μΌλ‘ μ‘΄μ¬ν¨)
- λ³μ μ μΈμ΄ μ€νλλ©΄ λ³μ μλ³μκ° λ μ컬 νκ²½μ ν€λ‘ λ±λ‘λ¨
- λ³μ ν λΉμ΄ μΌμ΄λλ©΄ λ μ컬 νκ²½μ λ³μ μλ³μμ ν΄λΉνλ κ°μ λ³κ²½
- λ³μμ κ²μλ λ μ컬 νκ²½μμ μ΄λ£¨μ΄μ§
*λ μ컬 νκ²½ : μ½λκ° μ΄λμ μ€νλλ©° μ£Όλ³μ μ΄λ€ μ½λκ° μλμ§. μ€μ½ν 체μΈμ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μ λ¨λ°©ν₯ μ°κ²°ν κ²μ.
μλ°μ€ν¬λ¦½νΈ μμ§μ μ€μ½ν 체μΈμ λ°λΌ λ³μλ₯Ό μ°Έμ‘°νλ μ½λμ μ€μ½νμμ μμν΄μ μμ μ€μ½ν λ°©ν₯μΌλ‘ μ΄λνλ©° μ μΈλ λ³μλ₯Ό κ²μν©λλ€. μμ μμ μ½λμ ν¨κ» μ΄ν΄λ³΄λ©΄ μλμ κ°μ΅λλ€.
- inner()ν¨μμ console.log(y)λ¬Έμ μ§μ μ€μ½νμμ yλ³μκ° μμΌλ©΄, μμ μ€μ½ν outer()λ₯Ό κ²μνμ¬ ν΄λΉ ν¨μμλ μκΈ° λλ¬Έμ outer()μ μμ μ€μ½νμΈ μ μ μ€μ½νλ‘ μ΄λνμ¬ "global y"λ₯Ό μΆλ ₯
- μ μμ μλ console.log(z)λ¬Έμ μμ μ μ€μ½νμΈ μ μμ zλ³μκ° μμΌλ―λ‘ ReferenceErrorκ° λ°μ
- Javaμ μμκ³Ό μ μ¬ν κ°λ
λ³μμ λ§μ°¬κ°μ§λ‘ ν¨μλ μλ³μμ ν΄λΉλκΈ° λλ¬Έμ μ€μ½νλ₯Ό κ°μ§κ² λ©λλ€. κ²°λ‘ μ μΌλ‘ μ€μ½νλ μλ³μλ₯Ό κ²μνλ κ·μΉμ΄λΌ μ μν μ μμ΅λλ€.
ν¨μ λ 벨 μ€μ½ν
μ§μ μ€μ½νκ° ν¨μ λͺΈμ²΄ λ΄λΆλ₯Ό μ€μ½νλ‘ κ°μ§λ κ²μ²λΌ, μ½λ λΈλ‘μ΄ μλ ν¨μμ μν΄μλ§ μ§μ μ€μ½νκ° μμ±λλ κ²μ ν¨μ λ 벨 μ€μ½νλΌν©λλ€. λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄λ λΈλ‘ λ 벨 μ€μ½νμΈ λ°λ©΄ μλ°μ€ν¬λ¦½νΈμ var ν€μλλ‘ μ μΈλ λ³μλ€μ ν¨μ λ 벨 μ€μ½ν νΉμ±μ κ°μ§λλ€.
μ’ λ₯ | μ€λͺ | ν€μλ |
ν¨μ λ 벨 μ€μ½ν | μ€λ‘μ§ ν¨μμ μ½λ λΈλ‘(ν¨μ λͺΈμ²΄)λ§μ μ§μ μ€μ½νλ‘ μΈμ | var |
λΈλ‘ λ 벨 μ€μ½ν | λͺ¨λ μ½λ λΈλ‘μ΄ μ§μ μ€μ½νλ₯Ό μμ± | let, const |
var x = 1;
if(true) {
var x = 10;
}
console.log(x); // 10
λ μ컬 μ€μ½ν
νλ‘κ·Έλλ° μΈμ΄μμ ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ νλ λ°©λ²μλ λμ μ€μ½νμ λ μ컬 μ€μ½ν 2κ°μ§κ° μ‘΄μ¬ν©λλ€.
- λμ μ€μ½ν : ν¨μλ₯Ό μ΄λμ νΈμΆνλμ§μ λ°λΌ ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ
- λ μ컬(μ μ ) μ€μ½ν : ν¨μλ₯Ό μ΄λμ μ μνλμ§μ λ°λΌ ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // 1
bar(); // 1
μλ°μ€ν¬λ¦½νΈλ λ μ컬 μ€μ½νλ₯Ό λ°λΌ ν¨μλ₯Ό μ΄λμ μ μνλμ§μ λ°λΌ μμ μ€μ½νλ₯Ό κ²°μ νκ² λ©λλ€. μ¦, ν¨μμ μμ μ€μ½νλ μΈμ λ μμ μ΄ μ μλ μ€μ½νμ΄κΈ° λλ¬Έμ μμ κ°μ μν©μμ bar()λ μ΄λμ νΈμΆλλ bar()μ μμ μ€μ½νμΈ μ μ λ³μxμ κ° 1μ μΆλ ₯νκ² λ©λλ€.
[μΆμ²] λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive
'JavaScript > λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript] let, const ν€μλμ λΈλ‘ λ 벨 μ€μ½ν (0) | 2022.07.21 |
---|---|
[JavaScript] μ μ λ³μμ λ¬Έμ μ (0) | 2022.07.21 |
[JavaScript] ν¨μ (0) | 2022.07.19 |
[JavaScript] μμ κ°κ³Ό κ°μ²΄μ λΉκ΅ (0) | 2022.07.18 |
[JavaScript] κ°μ²΄ 리ν°λ΄ (0) | 2022.07.18 |
- Total
- Today
- Yesterday
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
- νλ‘νΌν°
- fp
- νλ‘ν μ½
- 2019 μΉ΄μΉ΄μ€ κ°λ°μ κ²¨μΈ μΈν΄
- μ½λ©ν μ€νΈ
- λ°±μ€ node.js
- ν¬ν¬μΈν°
- μΉ΄μΉ΄μ€ μΈν΄
- μ μ λ³μ
- map
- λμμΈ ν¨ν΄
- TDD
- λ€μ΄λλ―Ή νλ‘κ·Έλλ°
- ν¨μν νλ‘κ·Έλλ°
- λ€νΈμν¬
- λͺ¨λ μλ°μ€ν¬λ¦½νΈ deep dive
- λ μ컬 νκ²½
- λ°±μ€
- μκ³ λ¦¬μ¦
- μλ°μ€ν¬λ¦½νΈ
- νλ‘κ·Έλλ¨Έμ€
- μ΄μ체μ
- git
- μ΄λΆνμ
- JavaScript
- μλ°
- http
- λ°±μ€ javascript
- Baekjoon
μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |