JavaScript: Understanding the Weird Parts - Function Factories

3507 ワード

IIFEなどによって他の環境とパラメータにおける関数の動作を見た.
エンクロージャの存在は、柔軟なモードを意味します
function makeGreeting() {
  return function(firstname, lastname) {
    if(language === 'en') {
      console.log('Hello ' + firstname + ' ' + lastname)
    }
    
    if(language === 'es') {
      console.log('Hola ' + firstname + ' ' + lastname)
    }
  }
}
language変数を奥の関数に渡し、奥の関数を返します
const greetEnglish = makeGreeting('en')
const greetSpanish = makeGreeting('es')
パラメータによって戻り関数の結果が異なります
次に返される関数には、それぞれの実行コンテキストがあります.
greetEnglish('John', 'Doe')
greetSpanish('John', 'Doe')
makeGreetingは工場関数のように動作します
実行コンテキストの観点から
グローバル実行スタックにもグローバル変数があります
2つのlanguageはpop後も存在するcloserです
2つの関数はlanguageとfirstname、lastnameをそれぞれ参照します.