μ€ν컨ν μ€νΈλ₯Ό 곡λΆνλ©΄μ μ€ν컨ν μ€νΈ, νκ²½λ μ½λ, λ μ컬νκ²½ λ±μ κ΄κ³κ° κ΅μ₯ν 볡μ‘νκ² μ½νμμμ μκ² λμλ€. κ·Έλ¬λ€ λ¬Έλ νΌλ³΄λμΉ μμ΄μ κ²½μ°μ μ€ν컨ν μ€νΈλ μ΄λ€μμΌλ‘ λμνλμ§κ° κΆκΈν΄μ‘λ€. μ°μ μ€ν컨ν μ€νΈλ₯Ό 곡λΆνλ©΄μ μκ² λ λ΄μ©λ€μ μ λ¦¬ν΄ λ³΄λ €κ³ νλ€.
βοΈ μ€ν 컨ν μ€νΈ
μλ°μ€ν¬λ¦½νΈμ λμμ리λ₯Ό λ΄λ ν΅μ¬ κ°λ μΌλ‘ κ°λ¨ν λ§ν΄μ μ½λμμ€ννκ²½μ΄λΌκ³ λ³Ό μ μλ€.
μ€ν컨ν μ€νΈλ₯Ό μμ±νλ μ½λμλ λ€κ°μ§κ° μ‘΄μ¬νλ€.
1. μ μ μ½λ: μ μμ μ‘΄μ¬νλ μ½λ
2. ν¨μ μ½λ: ν¨μ λ΄λΆμ μ‘΄μ¬νλ μ½λ
3. eval μ½λ: eval ν¨μμ μΈμλ‘ μ λ¬λμ΄ μ€νλλ μ½λ
4. λͺ¨λ μ½λ: λͺ¨λ λ΄λΆμ μ‘΄μ¬νλ μ½λ
κ°μ₯ λ¨Όμ μ€ν 컨ν μ€νΈ μ€ν μ μ μ μ€ν 컨ν μ€νΈ μμ±λκ³ , μ μ λ μ컬νκ²½ μμ±, μ μ νκ²½ λ μ½λ μμ±, κ°μ²΄ νκ²½ λ μ½λ, μ μΈμ νκ²½ λ μ½λκ° μμ±λλ€.
κ°μ²΄ νκ²½ λ μ½λλ BindingObjectλΌλ κ°μ²΄μ μ°κ²°λλλ° μ΄λ μ μ κ°μ²΄μ΄λ€.
λ¨Όμ μ½λκ° μ€νμ΄ λλ©΄ μ μμ½λλ₯Ό νκ°νλ κ³Όμ μ κ±°μΉλ€.
νκ°κ³Όμ μμλ μ μΈλ¬Έλ€λ§ λ¨Όμ μ€νμ΄ λλλ° ν΄λΉ μ½λλ₯Ό κΈ°μ€μΌλ‘ var ν€μλλ‘ μ μΈλ μ μ λ³μμ foo ν¨μ μ μΈλ¬Έμ΄ λ¨Όμ νκ°λλ€. λν, μ μΈλ λ³μ λ° ν¨μλ μ μ κ°μ²΄μ νλ‘νΌν°μ λ©μλκ° λλ€.(window κ°μ²΄μ x, foo)
constμ let ν€μλλ‘ μ μΈλ λ³μλ μ μΈμ νκ²½ λ μ½λμ λ±λ‘λλ€. μ΄λ μμ§ ν λΉμ΄ λμ§ μκ³ , νΈμ΄μ€ν μ΄ λμνμ§ μλ κ²μ²λΌ λμνκΈ° λλ¬Έμ μ μ μλ κ°μ΄ μ‘΄μ¬νκ² λλ€.
κ°λ¨ν μ½λλ₯Ό κΈ°μ€μΌλ‘ κ·Έλ¦Όμ 그리면μ μ€λͺ μ μΆκ°νλ €κ³ νλ€.
var x = 1;
const x2 = 2;
function foo() {
const x3 = 3;
console.log(x3);
}
foo();
κ·Έλ¦¬κ³ thisκ° λ°μΈλ©λλλ° μ μ λ μ컬 νκ²½μ [[GlobalThisValue]] λ΄λΆμ¬λ‘―μ thisκ° λ°μΈλ©λλ€. μ μ μ½λμμμ thisλ μ μ κ°μ²΄λ₯Ό κ°λ₯΄ν€κΈ° λλ¬Έμ μ μκ°μ²΄ windowκ° λ°μΈλ© λλ€.
μΈλΆ λ μ컬 νκ²½ μ°Έμ‘°λ νμ¬ νκ°μ€μΈ μμ€ μ½λλ₯Ό ν¬ν¨νλ μΈλΆ μμ€ μ½λμ λ μ컬 νκ²½μΈ μμ μ€μ½νλ₯Ό κ°λ₯΄ν€λλ° μ μμ κ²½μ° nullμ΄ ν λΉλλ€.
μ μ μ½λ νκ° μ΄ν μ μ μ½λκ° μ€νμ΄ λκ² λλλ° μ΄λ μ μΈλ§ λμλ λ³μ κ°λ€μ κ°μ΄ ν λΉμ΄ λκ² λλ€.
ν¨μμ½λμ κ²½μ° ν¨μκ° νΈμΆλ λ ν¨μ μ€ν 컨ν μ€νΈκ° μμ±μ΄ λλ€.
μ½λμ λ§μ§λ§ λΆλΆμ fooν¨μλ₯Ό νΈμΆνλλ° μ΄λ μ μ μ½λμ μ€νμ μΌμ μ€λ¨νκ³ fooν¨μλ‘ μ μ΄κΆμ΄ μ΄λνλ€.(μ΄λ ν¨μ λ΄λΆ μ½λκ° νκ°λλ€.) ν¨μ μ€ν 컨ν μ€νΈκ° μμ±μ΄ λκ³ , ν¨μ λ μ컬 νκ²½ μμ±, ν¨μ νκ²½ λ μ½λκ° μμ±λλ€
ν¨μλ λ§μ°¬κ°μ§λ‘ νκ°λ λ, μ μΈλ¬Έλ€μ΄ λ¨Όμ λ±λ‘μ΄ λλ€.
λ°λΌμ const x3 = 3;μ const ν€μλλ‘ μ μΈλ x3(const x3)κ° ν¨μ νκ²½ λ μ½λμ λ±λ‘μ΄ λλ€.
ν¨μμ 맀κ°λ³μ, argument κ°μ²΄, ν¨μ λͺΈμ²΄ λ΄λΆμμ μ μΈλ μλ³μλ€μ΄ ν¨μ νκ²½ λ μ½λμ λ±λ‘μ΄ λλ€.
μ΄ν thisκ° λ°μΈλ© λλλ° μ΄λ foo ν¨μλ μΌλ°ν¨μλ‘μ νΈμΆλμκΈ° λλ¬Έμ thisλ μ μ κ°μ²΄κ° λλ€.
ν¨μμ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°λ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ ν¨μ μ μλ₯Ό νκ°νκ³ ν¨μ κ°μ²΄λ₯Ό μμ±ν λ μ€νμ€μΈ 컨ν μ€νΈμ λ μ컬 νκ²½μ ν¨μ κ°μ²΄μ λ΄λΆμ¬λ‘― [[Environment]]μ μ μ₯νλ€.
μ΄ν ν¨μ λ μ컬 νκ²½μ μλ μΈλΆ λ μ컬νκ²½μ λν μ°Έμ‘°λ μ΄ ν¨μμ λ΄λΆμ¬λ‘― [[Environment]]λ₯Ό μ°Έμ‘°νλ€. λ°λΌμ μ μ½λλ₯Ό κΈ°μ€μΌλ‘ foo ν¨μμ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°λ μ μ λ μ컬 νκ²½μ κ°λ₯΄ν¨λ€.
ν¨μ λ΄λΆ νκ° μ΄ν ν¨μ μ½λλ₯Ό μ€ννλ©΄μ ν¨μ νκ²½ λ μ½λμ μ‘΄μ¬νλ λ³μ x3μλ 3μ΄ ν λΉλκ³ console.log(x3)κ° μ€νλλλ° μ΄λ consoleμ log λ©μλλ₯Ό νΈμΆ μ¦, ν¨μ νΈμΆμ΄κΈ° λλ¬Έμ λ λ€μ μ€ν 컨ν μ€νΈκ° λ§λ€μ΄μ§λ€.
μ΄λ `console` κ°μ²΄λ window κ°μ²΄κ° λ§λ€μ΄μ§λ λ΄λΆμ μ‘΄μ¬νκΈ° λλ¬Έμ μ μ κ°μ²΄(window)μμ `console`μ μ°Ύμ `log` ν¨μλ₯Ό νκ°νλ κ³Όμ μ κ±°μΉλ€.
λ΄λΆμ μΌλ‘ μΈμλ₯Ό λ°κΈ° λλ¬Έμ ν΄λΉ μΈμκ° log ν¨μ νκ²½ λ μ½λμ λ±λ‘λκΈ° μ μ log ν¨μ μ€ν 컨ν μ€νΈκ° μμ±λκ³ , ν¨μ λ μ€μ»¬ νκ²½, ν¨μ νκ²½ λ μ½λλ€μ΄ μμ±μ΄ λκ³ μ μΈλ¬Έλ€μ΄ ν¨μ νκ²½ λ μ½λμ λ±λ‘μ΄ λλ€.
(λ΄λΆμ μΌλ‘ console.logλ‘ μ°μ λ³μλ₯Ό xxxλΌλ λ³μλΌκ³ κ°μ ν¨ - argumentλ₯Ό μ΄μ©ν΄μ μΆλ ₯ν μ§λ λͺ¨λ₯΄κ² λ€λ μκ°μ νλ€!)
log ν¨μ λ μ컬 νκ²½μ [[ThisValue]]μλ μ μκ°μ²΄ windowμ console κ°μ²΄κ° λ°μΈλ© λλ€.
μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°μλ νμ¬ μ€νμ€μΈ μ€ν 컨ν μ€νΈκ° foo ν¨μμ μ€ν 컨ν μ€νΈ μ΄λ―λ‘ fooν¨μμ λ μ컬 νκ²½μ κ°λ₯΄ν€κ² λλ€.
log ν¨μμ νκ°κ° μ’ λ£λκ³ μ€νλλ©΄μ xxxμλ μΈμλ‘ λ£μ΄μ€ 3μ΄ ν λΉμ΄ λκ³ λ΄λΆ λμμΌλ‘ μΈν΄ consoleμ 3μ΄λΌκ³ μ°νκ² λλ€.
logν¨μκ° μ’ λ£κ° λλ©΄ log ν¨μμ μ€ν 컨ν μ€νΈκ° μ€ν 컨ν μ€νΈ μ€ν μμ μ κ±°λλ€. μ΄λ λ μ컬 νκ²½μ΄ λ°λ‘ μ¬λΌμ§μ§λ μλλ° μ΄λ ν΄λ‘μ μ μ°κ΄λλ€.
log ν¨μμ μ€ν 컨ν μ€νΈκ° μ κ±°λκ³ , foo ν¨μλ μ’ λ£λλ―λ‘ μ€ν 컨ν μ€νΈ μ€ν μμ μ κ±°, μ μ μ€ν 컨ν μ€νΈλ λ§μ°¬κ°μ§λ‘ μ κ±°λλ―λ‘ μ€ν 컨ν μ€νΈ μ€ν μλ μ무κ²λ λ¨μ§ μκ² λκ³ μ΄λ μ½λκ° μ’ λ£λλ€.
κ²°κ΅ μ€ν 컨ν μ€νΈ μ€ν μμ κ°μ₯ μλ¨μ μ‘΄μ¬νλ μ€ν 컨ν μ€νΈκ° νμ¬ μ€νμ€μΈ μ€ν 컨ν μ€νΈμ΄κ³ , μ€ν 컨ν μ€νΈκ° μ‘΄μ¬ν λ μ½λκ° μ€νλ¨μ μ μ μλ€.
μ΄λ° κ³Όμ λ€μ κ±°μΉλ©΄μ μλ°μ€ν¬λ¦½νΈ μ½λκ° μ€νμ΄ λλλ° κ·Έλ λ€λ©΄ νΌλ³΄λμΉ μμ΄μ κ²½μ° λ°λ³΅ν΄μ μ¬κ·ν¨μλ₯Ό νΈμΆνλλ° μ΄λλ μ΄λ»κ² λλμ§ μ°Ύμλ΄€λ€.
νΌλ³΄λμΉ μμ΄μ 0κ³Ό 1λ‘ μμν΄μ λ€μ νΌλ³΄λμΉ μμ΄μ μλ μμ λ μλ₯Ό λν κ°μ΄ λλ€.
κ°λ¨νκ² Fλ‘ λνλ΄μ 4λ¨κ³μ νΌλ³΄λμΉ μμ΄λ‘ κ·Έλ¦Όμ κ·Έλ €λ³΄λ©΄ λ€μκ³Ό κ°λ€.
μλ°μ€ν¬λ¦½νΈλ₯Ό μ΄μ©ν΄μ νΌλ³΄λμΉλ₯Ό κ°λ¨νκ² κ΅¬ννμλλ λ€μκ³Ό κ°λ€.
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
console.log(fibonacci(10)); // 3
μ μ½λμ ifλ¬Έκ³Ό debuggerλ₯Ό μ΄μ©ν΄μ νΌλ³΄λμΉ ν¨μκ° ν¬λ‘¬ λΈλΌμ°μ μμ μ€νλ λ μ€ν 컨ν μ€νΈ(call stack)κ° μΌλ§λ μμ΄λμ§ νμΈν΄λ³΄μλ€.
function fibonacci(n) {
if (n <= 1) return n;
if (n === 2) debugger;
return fibonacci(n - 1) + fibonacci(n - 2);
}
console.log(fibonacci(4));
4λ²μ§Έ μλ₯Ό μ°Ύμλ nμ΄ 2μΌλλ₯Ό νμΈν΄λ³΄λ©΄
μ΄μ΄μ 10λ²μ§Έ μλ₯Ό μ°Ύμλ nμ΄ 2μΌλλ₯Ό νμΈν΄λ³΄λ©΄
νΌλ³΄λμΉ μμ΄ μ½λμμ λ¨Όμ μ μ μ½λκ° νκ°κ° λλ©΄μ μ€ν 컨ν μ€νΈ μ€ν μ μ μ μ€ν 컨ν μ€νΈ, μ μ λ μ컬νκ²½, μ μ νκ²½ λ μ½λ, κ°μ²΄ νκ²½ λ μ½λ, μ μΈμ νκ²½ λ μ½λκ° μμ±λκ³ , μ μ κ°μ²΄(window)μ λ©μλλ‘ fibonacci ν¨μκ° λ±λ‘λλ€. λν this λ°μΈλ©μ μ μκ°μ²΄κ°, μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°μλ nullμ΄ ν λΉλ κ²μ΄λ€. μ΄ν νΌλ³΄λμΉ ν¨μκ° νΈμΆμ΄ λλ©΄μ νΌλ³΄λμΉ ν¨μ μ€ν 컨ν μ€νΈκ° λ§λ€μ΄μ§κ³ λ΄λΆμ μΌλ‘ ν¨μλ₯Ό νΈμΆνλ©΄μ λ°ννλ€.
nμ΄ 2μΈ κ²½μ°μ debuggerμ νλ―λ‘ λ€μ κ·Έλ¦Όκ³Ό κ°μ΄ νΈμΆλλ€.
F(4), F(3), F(2) μμλ‘ νΈμΆμ΄ λλ€. λ°λΌμ κ²°κ΅ μ€ν컨ν μ€νΈλ λ€μκ³Ό κ°μ΄ ꡬμ±λλ€.
(F(4), F(3), F(2) μμλ‘ μ€ν 컨ν μ€νΈ μ€ν μ κ°κ°μ μ€ν 컨ν μ€νΈκ° μμ±λλ€.)
μ€ν 컨ν μ€νΈλ₯Ό κ·Έλ¦ΌμΌλ‘ 그리면μ 곡λΆλ₯Ό νλ λ³΄λ€ μ½κ² μ κ·Όν μ μμλ€κ³ μκ°νλ€. μμ§λ κ΅μ₯ν μ΄λ €μ΄ κ°λ μ΄μ§λ§ μ€μ½ν, ν΄λ‘μ λ± λ§μ κ°λ λ€μ΄ μ°κ΄λμ΄ μκΈ° λλ¬Έμ μ΄μν¨μ λλλ κ·Έλ¦Όμ κ·Έλ €λ³΄λ©΄μ μλͺ»λ λΆλΆμ μ°Ύμκ°λ κ²λ μ’μ λ°©λ²μ΄λΌλ μκ°μ΄ λ€μλ€
'JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Javascript] μλ°μ€ν¬λ¦½νΈ κ°μ²΄ - νλ ν΄λμ€, μΈλΌμΈμΊμ (0) | 2024.10.06 |
---|---|
[Javascript] νλ‘ν νμ (Prototype) (1) | 2023.04.15 |