June 05, 2020
μ½ ν λ¬λ§μ ν¬μ€νΈμ΄λ€.
μ§λ ν λ¬λμ νμ¬μΌμ μ§μ€λ νκ³ , μμΈμ μ¬λΌμ¨ κΈ°λ
μΌλ‘ μΉκ΅¬λ€λ λ§μ΄ λ§λμ λΈλ‘κ·Έ ν¬μ€ν
μ μ§ννμ§ λͺ»νλ€.. (μ¬μ€ μνκ² μλκ° μΆμλ°)
λ€μ μ΄μ¬ν νλ €κ³ νμ¬μΌμ μ§μ€νλ©΄μ, λμκ² νμν λ΄μ©λ€μ μ°Ύμ 보λ€κ° jsμ κΏνκ°μ μ¬μ΄νΈλ₯Ό μ°Ύκ²λμλ€.
ν΄λΉ λ΄μ©μ μ½μ΄λ³΄λ©΄μ λκ°μ javascript beginnerλ€μ΄ μ²μ보면 μΌνλ²λ¦΄ μ μλ(μ΄κ² λμ§ μΆμ), κ·Έλ¬ν νλ€μ΄ λ§μ΄ μ‘΄μ¬νλ€! 1λ²λΆν° λ§νμ κΉμ§λλλ€..
μ€μν μ μ, ν΄λΉ ν¬μ€νΈλ₯Ό μ½μΌλ©΄μ IIFEλΌλ λ΄μ©μ μ²μ μ νκ² λμλλ° λ± λ΄λ μΆμ½μ΄μΈκ² λμ λν μΆμ½μ΄μΈμ§ μ λͺ°λΌμ κ²μν΄λ³΄λ λ€μκ³Ό κ°κ² λμλ€.
IIFE(Immediately Invoked Function Expressions: βIffyβλΌκ³ λ°μ)λ μ¦μ νΈμΆ ν¨μ ννμμ μ€μλ§μ λλ€.
μ μλ§ λ³΄κ³ λ λ΄κ° μ 리ν΄μΌ ν λ§ν λ΄μ©μμ μ§κ°νκ² λμ΄μ ν΄λΉ λ΄μ©μ μ 리νλ €λ μ°Έμ μ΄ ν¬μ€νΈλ₯Ό μμ±νκ² λμλ€!
κ·Έλμ μ€λμ IIFEλ 무μμΈμ§, μΈμ μ¨μΌνλμ§μ λν΄μ μμ보λλ‘ νμ.
μμμλ μ€λͺ νμμ§λ§, IIFE(Immediately Invoked Function Expressions)λ μ¦μ νΈμΆ ν¨μ ννμμ μ€μλ§μ΄λΌκ³ νλ€.
λκ°μ js beginnerλ€μ ν¨μ ννμκ³Ό ν¨μ μ μΈμμ λν΄μ μ λͺ¨λ₯΄κ±°λ, λμΆ©μ μκ³ μμ§λ§ λ¬Όμ΄λ³Ό λλ§λ€ ν·κ°λ¦΄ μ μμΌλ μ 리νλ©΄μ κ°λ³΄λ €κ³ νλ€.
λ¨Όμ , ν¨μ μ μΈμμ΄λ λ€μκ³Ό κ°μ ν¨μμ ννλ₯Ό μλ―Ένλ€.
function sum(x, y) {
return x + y
}
var sum = function (x, y) {
return x + y
}
μμΈνκ² λ΄λΆλ‘ λ€μ΄κ°κ² λλ©΄ νΈμ΄μ€ν (Hoisting)μ΄λΌλ κ°λ κ³Ό κ΄λ ¨μ΄ μμ§λ§, ν΄λΉ λ΄μ©μ μμΈν μ€λͺ μ λμ€μ λ€λ£¨λλ‘ νκ³ μλμ ν λ¬Έμ₯λ§ κΈ°μ΅νλλ‘ νμ!
ν¨μ μ μΈ(declaration)μ μΈμ λ μ§ νΈμΆν μ μμ§λ§, ν¨μ νν(expression)μ μλλ€.
μ΄μ κ·ΈλΌ λ³Έκ²©μ μΌλ‘ IIFEμ λν΄μ μμ보μ.
μμμλ λ§νμ§λ§, IIFEλ Immediately Invoked Function ExpressionsμΌλ‘, νκ΅μ΄λ‘ μ§μνλ©΄ μ¦μ νΈμΆ ν¨μ ννμμ μλ―Ένλ€.
κ·ΈλΌ IIFEλ μ΄λ»κ² λ§λλκ±ΈκΉ? λ€μμ μμλ₯Ό νμΈν΄λ³΄μ.
function addTogether() {
var x = 10
var y = 20
var answer = x + y
console.log(answer)
}
addTogether()
μ°λ¦¬κ° μ¬κΈ°μ IIFEλ₯Ό λ§λ€κΈ° μν΄μλ λ¨Όμ μκ΄νΈ(brackets)μΌλ‘ ν¨μλ₯Ό κ°μΈλ κ² λΆν° μμνλ€. κ·Έλ κ² λλ€λ©΄ μμ ν¨μλ,
(function addTogether() {
var x = 10
var y = 20
var answer = x + y
console.log(answer)
})
(function() {
var x = 10
var y = 20
var answer = x + y
console.log(answer)
})
μ μ΄λ κ² λ³νλμ§ λͺ¨λ₯΄κ² λ λΆλ€μ κΈμ μλλΆν° μ²μ²ν μ½μΌμλ©΄ μ κ·Έλ°μ§ μκ² λ κ²μ΄λ€! λ무 μ¬μ΄ λ΄μ©μ΄λ ν¨μ€νκ² λ€.
κ·Έλ¦¬κ³ μμ λ΄μ©μ΄ μ΄μ ν¨μ ννμμ΄ λμλλ°, μ°λ¦¬κ° μ΄ ν¨μ ννμμ μ¦μ νΈμΆ μμΌμΌ IIFEκ° λλκ²μ΄λ€! κ·Έλ λ€λ©΄ μ°λ¦¬κ° μμ ν¨μμμ μ΄λ»κ² νΈμΆν μ μμκΉ? λ€μκ³Ό κ°μ΄ νλ©΄ λλ€.
(function() {
var x = 10
var y = 20
var answer = x + y
console.log(answer)
})()
μ°¨μ΄μ μ΄ λ³΄μ΄λκ°? λ°λ‘ λ€μ λ μκ΄νΈ(brackets)λ₯Ό λ£μλ€! μ°λ¦¬κ° μΌλ°μ μΌλ‘ ν¨μλ₯Ό νΈμΆνκΈ° μν΄μλ ν¨μλͺ μ μ΄ λ€, λ€μ μκ΄νΈλ₯Ό λΆνλκ² μΌλ°μ μ΄λ€. μ΄λ κ² IIFEκ° μμ±λμλ€!
Googleμ global variable dangerousλΌκ³ μΉλ©΄ λμ€λ κΈ. EVILμ΄λΌκ³ ννν μ λμ΄λ€.
μ μ λ³μλ₯Ό μ¬μ©νμ§ μκΈ° μν΄μ
λ§μ νλ‘κ·Έλλ¨Έλ€μ΄ μ μ λ³μμ νΈλ¦¬ν¨μ λν΄μ μΈμ§νκ³ μμ§λ§, κ·Έκ²μ side-effectλ λμμ μΈμ§νκ³ μμκ±°λ€.
λ§μ μ¬λλ€λ λλλ‘ μμ°λκ² μ’λ€κ³ μκ°νλ λ§νΌ, κ·Έκ²μ΄ μ°λ¦¬μκ² κ°μ Έλ€ μ€ νΈλ¦¬ν¨λ³΄λ€ κ·Έκ²μ΄ μ°λ¦¬μκ² κ°μ Έλ€ μ€ μνμ±μ΄ λ무 ν¬λ€.
κ·Έλ κΈ° λλ¬Έμ λ§μ μ¬λλ€μ, μ μ λ³μλ₯Ό μ¬μ©νκΈ°λ₯Ό κΊΌλ €νκ³ λ λν κ·Έλ κ² λ°°μμλ€.
μ€λ ν¬μ€νΈμμ λ΄€λ IIFEκ°μ κ²½μ°λ μ μλ³μμ μ¬μ©μ μ΅μν νκΈ° μν΄μ λ§λ€μ΄μ§ ν¨μ ννμμ΄λ€. μ’μ κΈ°λ²μ΄λΌκ³ μκ°νκ³ μκ³ , λμ€μ μΈ μΌμ΄ μμΌλ©΄ μ κ·Ήμ μΌλ‘ μ¬μ©ν΄λ΄μΌκ² λ€!
λ μμΈν λ΄μ©λ€μ λ΄κ° μ°Έκ³ νμλ λΈλ‘κ·Έμ ν¬μ€νΈλ₯Ό μ°Έκ³ νμλ©΄ μ’μ κ² κ°λ€. μ΄ λ΄μ©μ λ¨μν κ·Έ λ΄μ©λ€μ μ 리ν μ λμ΄λ :)