I never understood JavaScript closures - Lee-hyuna/33-js-concepts-kr GitHub Wiki
μλ°μ€ν¬λ¦½νΈ ν΄λ‘μ λ₯Ό μ΄ν΄νμ§ λͺ»νμ΅λλ€.
(...μ?μμ€μ΄κ² μ§...)
μλ¬Έ : https://medium.com/dailyjs/i-never-understood-javascript-closures-9663703368e8
μ λͺ©μμ μ μΆν μ μλ―μ΄ μλ°μ€ν¬λ¦½νΈ ν΄λ‘μ λ νμ λ―Έμ€ν 리μ λλ€. μ λ§μ κΈλ€μ μ½κ³ , μ 무μμ ν΄λ‘μ λ₯Ό μ¬μ©ν΄λ³΄κ³ , κ°λμ ν΄λ‘μ λ₯Ό μ¬μ©νλ μ€μ κΉ¨λ¬μμμ΄ ν΄λ‘μ λ₯Ό μ¬μ© νμμ΅λλ€.
μ΅κ·Όμ λ§μΉ¨λ΄ ν΄λ‘μ λ₯Ό μ€λͺ ν΄μ£Όλ ν ν¬ μ리μ κ°μ΅λλ€. μ΄ κΈμμ ν΄λ‘μ λ₯Ό μ€λͺ νκΈ° μν΄ μ΄ λ°©λ²μ μ¬μ©ν κ²μ λλ€. CodeSmithμ JavaScript The Hard Parts μ리μ¦μ μ°Έμ¬ν λΆμκ² κ³΅μ λλ¦¬κ² μ΅λλ€
μμνκΈ° μ μ
μ΄λ€ κ°λ λ€μ ν΄λ‘μ λ₯Ό μ΄ν΄λ³΄κΈ° μ μ λ μ΄ν΄λ³΄λ κ²μ΄ μ€μν©λλ€. κ·Έκ²λ€ μ€μ νλκ° μ€ν 컨ν μ€νΈμ λλ€.
This article λ μ€ν 컨ν μ€νΈλ₯Ό μ μ€λͺ ν κΈμ λλ€. μ΄ κΈμμ λ§νλ λ΄μ©μ:
μλ°μ€ν¬λ¦½νΈμμ μ½λκ° μ€νλ λ, μ½λκ° μ€νλλ νκ²½μ λ§€μ° μ€μνκ³ , λ€μ μ€ νλλ‘ νκ°λκ³ μμ΅λλ€. :
μ μ μ½λ β μ½λκ° μ²μμΌλ‘ μ€νλλ κΈ°λ³Έ νκ²½.
ν¨μ μ½λ β μ€νμ νλ¦μ΄ ν¨μμ λ³Έλ¬ΈμΌλ‘ λ€μ΄ κ° λλ§λ€.
(β¦)
(β¦), μ€ν 컨ν μ€νΈμ μ©μ΄λ νμ¬μ μ½λκ° νκ°λκ³ μλ νκ²½, μ€μ½νλΌκ³ μ μν΄λ΄ λλ€.
λ°κΎΈμ΄ λ§νλ©΄, νλ‘κ·Έλ¨μ μ€ννμ λ μ μ μ€ν 컨ν μ€νΈμμ μμν©λλ€. λͺλͺ λ³μλ€μ μ μ μ€ν 컨ν μ€νΈ λ΄λΆμμ μ μΈμ΄ λμ΄μ Έμ§λλ€. μ μ λ³μλ€μ νΈμΆν©λλ€. νλ‘κ·Έλ¨μ΄ ν¨μκ° νΈμΆ νμμ λ, λ¬΄μ¨ μΌμ΄ μΌμ΄λ κΉμ?
λͺ κ°μ§ μ€ν μ΄ μμ΅λλ€:
- μλ°μ€ν¬λ¦½νΈλ μλ‘μ΄ μ€ν 컨ν μ€νΈ, μ§μ μ€ν 컨ν μ€νΈλ₯Ό λ§λ¦λλ€.
- μ§μ μ€ν 컨ν μ€νΈλ μκΈ° μμ μ λ³μ μ§ν©μ κ°μ§κ³ μμ΅λλ€. μ΄λ€ λ³μλ€μ μ§μμμ μ€ν 컨ν μ€νΈκ° λ κ²μ λλ€.
- μλ‘μ΄ μ€ν 컨ν μ€νΈλ μ€ν μ€νμ μΆκ°λ©λλ€. μ€ν μ€νμ μ€ν μ€μΈ νλ‘κ·Έλ¨μ μμΉλ₯Ό μΆμ νλ λ©μ»€λμ¦μ΄λΌκ³ μκ°ν©λλ€.
μΈμ ν¨μκ° λμ΄ λ κΉμ? μΈμ λ°ν(return) κ΅¬λ¬Έμ΄ μκ±°λ λ«νλ μ€κ΄νΈ } κ° μλ κ²½μ°. ν¨μκ° λλ¬μ λ μλμ λ΄μ©μ΄ λ°μν©λλ€.:
- μ§μ μ€ν 컨ν μ€νΈλ μ€ν μ€νμμ λΆλ¦¬λ©λλ€.
- ν¨μλ λ°ν κ°μ νΈμΆ 컨ν μ€νΈλ‘ λ€μ μ λ¬ν©λλ€. νΈμΆ 컨ν μ€νΈλ μ΄ ν¨μλ₯Ό νΈμΆν μ€ν 컨ν μ€νΈλ‘μ κΈλ‘λ² μ€ν 컨ν μ€νΈ λλ λ€λ₯Έ μ§μ μ€ν 컨ν μ€νΈμ λλ€. κ·Έ μμ μμ λ°νκ°μ μ²λ¦¬νλ κ²μ νΈμΆ μ€ν 컨ν μ€νΈμ λ¬λ € μμ΅λλ€. λ°νκ°μ κ°μ²΄, λ°°μ΄, ν¨μ, λΆμΈ λ± λ¬΄μμ΄λ λ μ μμ΅λλ€. λ§μ½ ν¨μμ λ°ν κ΅¬λ¬Έμ΄ μλ€λ©΄, undefinedμ λ°νν©λλ€.
- μ§μ μ€ν 컨ν μ€νΈλ μλ©Έλλ κ²μ μ€μ ν©λλ€.μλ©Έλλ€. μ§μ μ€ν 컨ν μ€νΈ λ΄μμ μ μΈλ λͺ¨λ λ³μλ μμ λ©λλ€. λ³μλ λμ΄μ μ¬μ©ν μ μμ΅λλ€. κ·Έλμ μ§μ λ³μλΌκ³ λΆλ¦ λλ€.
λ§€μ° κΈ°λ³Έμ μΈ μ
ν΄λ‘μ λ₯Ό μκΈ° μ μ λ€μ μ½λλ₯Ό μ΄ν΄λ΄ μλ€. μ΄κ²μ μ΄ κΈμ μ½λ μ¬λμ μλμ μ½λκ° λ¬΄μμ νλμ§ μ νν μκ³ μμ κ²μ λλ€.
1: let a = 3
2: function addTwo(x) {
3: let ret = x + 2
4: return ret
5: }
6: let b = addTwo(a)
7: console.log(b)
μλ°μ€ν¬λ¦½νΈ μμ§μ μ€μ μλ λ°©μμ μ΄ν΄νκΈ° μν΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μ€μ μλ λ°©μμ μμ£Ό μμΈνκ² μμ보λλ‘ ν©μλ€.
1νμμ μ μ μ€ν 컨ν μ€νΈμ μλ‘μ΄ λ³μ aλ₯Ό μ μΈνκ³ μ«μ 3μ ν λΉν©λλ€.
- λ€μμ κΉλ€λ‘μ΅λλ€. 2νμμ λΆν° 5νμ μ€μ λ‘ ν¨κ» μμ΅λλ€. μ΄ λΆλΆμμ λ¬΄μ¨ μΌμ΄ μΌμ΄λ κΉμ? μ μ μ€ν 컨ν μ€νΈμ addTwo μ΄λ¦μ κ°μ§ μλ‘μ΄ λ³μλ₯Ό μ μΈν©λλ€. κ·Έλ¦¬κ³ addTwoμ 무μμ΄ ν λΉλ κΉμ? ν¨μλ₯Ό μ μν©λλ€. λ κ°μ μ€κ΄νΈ {} μ¬μ΄μ μλ κ²μ΄ addTwoμ ν λΉν©λλ€. μ½λμ λ΄λΆμ ν¨μλ κ²μ¦ λμ§ μκ³ , μ€νλμ§ μκ³ λ―Έλμ μ¬μ©λ λ³μλ₯Ό μ μ₯ν‘λλ€.
- κ·Έ λ€μ 6νμΌλ‘ λμ΄ μ΅λλ€. μ΄ λΆλΆμ λ§€μ° κ°λ¨ν΄ 보μ΄μ§λ§ μ΄κ³³μμ ν©μ³μ Έ μμ§ μμ΅λλ€. 첫λ²μ§Έλ‘ μ μ μ€ν 컨ν μ€νΈμμ μλ‘μ΄ λ³μκ° μ μΈμ΄ λκ³ , labelμ bλ‘ μ§μ ν©λλ€. λ³μκ° μ μΈλμ λ§μ undefinedμ κ°μ κ°μ§λλ€.
- κ·Έλ€μ, μ¬μ ν 6νμ λλ€. μ°μ°μλ₯Ό ν λΉν κ²μ λ³Όμ μμ΅λλ€. λ³μ bλ₯Ό μλ‘μ΄ λ³μλ‘ ν λΉνκΈ° μν΄ κΈ°λ€λ¦½λλ€. κ·Έ λ€μ ν¨μκ° νΈμΆλ κ²μ λ³Ό μ μμ΅λλ€. λ³μ λ€μ λ₯κ·Ό κ΄νΈ (...)κ° νμλλ©΄ μ΄ κ²μ΄ ν¨μκ° νΈμΆμ΄ λκ³ μλ€λ μ νΈ μ λλ€. μμκ°μ λͺ¨λ ν¨μλ 무μΈκ°(κ°, κ°μ²΄ λλ μ μλμ§ μμ)λ₯Ό λ°νν©λλ€. ν¨μμμ λ°νλ κ²μ λ³μ bμ ν λΉλ©λλ€. ν¨μμμ λ°νλ κ²μ λ³μ bμ ν λΉμ΄ λ©λλ€.
- κ·Έλ¬λ 첫λ²μ§Έλ‘ addTwoλΌκ³ λ μ΄λΈλ ν¨μλ₯Ό νΈμΆν΄μΌ ν©λλ€. μλ°μ€ν¬λ¦½νΈλ μ μ μ€ν 컨ν μ€νΈ λ©λͺ¨λ¦¬μμ addTwoλΌλ λ³μλ₯Ό μ°Ύμ΅λλ€. addTwoλ³μλ₯Ό μ°ΎμΌλ©΄ step2(2νμμ 5ν)μμ μ μ λμ΄ μ§λλ€. κ·Έλ¦¬κ³ lo κ·Έλ¦¬κ³ addTowλ ν¨μ μ μλ₯Ό ν¬ν¨νκ³ μμ΅λλ€. λ³μ aλ ν¨μμ μΈμλ‘ μ λ¬μ΄ λμ΄ μ§λλ€. μλ°μ€ν¬λ¦½νΈλ μ μ μ€ν 컨ν μ€νΈ λ©λͺ¨λ¦¬μμ λ³μλ₯Ό μ°Ύμ΅λλ€. λ³μλ₯Ό μ°ΎμΌλ©΄ κ° 3μ κ°μ§κ³ , ν¨μμ μΈμλ‘ μ«μ 3μ΄ μ λ€μ΄ λ©λλ€. ν¨μμ μ€νμ κΈ°λ€λ¦½λλ€.
- μ€ν 컨ν μ€νΈλ μ νμ΄ λ©λλ€. μλ‘μ΄ μ§μ μ€ν 컨ν μ€νΈκ° μμ±μ΄ λμ΄μ§κ³ μ΄κ²μ addTwo μ€ν 컨ν μ€νΈλΌλ μ΄λ¦μ κ°μ§λλ€. μ€ν 컨ν μ€νΈλ μ½ μ€νμ μμ¬μ§λλ€. μ§μ μ€ν 컨ν μ€νΈμμ 무μμ΄ μ²μμΌλ‘ νΈμΆμ΄ λλμ?
- μλ‘μ΄ λ³μ retμ μ§μ μ€ν 컨ν μ€νΈμ μ μΈμ΄ λμ΄μ Έμμ΅λλ€λΌλ λλ΅μ μ³μ§ μμ΅λλ€. μ³μ λλ΅μ ν¨μμ 첫λ²μ§Έλ‘ ν¨μμ νλΌλ―Έν°λ₯Ό λ³Ό νμκ° μμ΅λλ€. μλ‘μ΄ λ³μ xλ μ§μ μ€ν 컨ν μ€νΈμ μ μΈμ΄ λμ΄ μμ΅λλ€. κ·Έλ¦¬κ³ 3 κ°μ΄ μΈμλ‘ μ λ¬μ΄ λμ΄μ‘κΈ° λλ¬Έμ λ³μ xμ μ«μ 3μ΄ ν λΉλμ΄ μ§λλ€.
- κ·Έ λ€μ μ€νμ μλ‘μ΄ λ³μ retμ μ§μ μ€ν 컨ν μ€νΈμ μ μΈμ΄ λμ΄μ Έ μμ΅λλ€. κ°μ undefinedκ° μ ν μ΄ λμ΄ μ§λλ€. (3ν)
- 3νμμ μ¬μ ν, μΆκ°μ μΈ μμ μ΄ νμ ν©λλ€. 첫λ²μ§Έλ‘ xμ κ°μ΄ νμλ‘ ν©λλ€. μλ°μ€ν¬λ¦½νΈλ λ³μ xλ₯Ό μ°Ύμ΅λλ€. 첫λ²μ§Έλ‘ λ³μ xλ₯Ό μ§μ μ€ν 컨ν μ€νΈμμ μ°Ύμ΅λλ€. κ·Έλ¦¬κ³ νλλ₯Ό λ°κ²¬νκ³ , κ°μ 3μ λλ€. κ·Έλ¦¬κ³ λλ²μ§Έ νΌμ°μ°μλ μ«μ 2μ λλ€. κ·Έλ¦¬κ³ λ³μ retμ λν΄μ§ κ²°κ³Όκ°μΈ 5κ° ν λΉμ΄ λ©λλ€.
- 4ν. ret λ³μμ κ°μ΄ λ°νμ΄ λμ΄ μ§λλ€. μ§μ μ€ν 컨ν μ€νΈμ λ€λ₯Έ κ²μ μ°Ύμ΅λλ€. retμ 5κ°μ ν¬ν¨ν¨λλ€. ν¨μλ μ«μ 5λ₯Ό λ°νν©λλ€. κ·Έλ¦¬κ³ ν¨μλ λμ΄ λ©λλ€.
- 4ν, 5ν. ν¨μλ λμ΄λ©λλ€.μ§μ μ€ν 컨ν μ€νΈλ μλ©Έμ΄ λ©λλ€. λ³μ x κ·Έλ¦¬κ³ retμ μ¬λΌμ§λλ€. xμ retμ λμ΄μ μ‘΄μ¬νμ§ μμ΅λλ€. 컨ν μ€νΈλ μ½μ€νμμ λΉ μ Έλκ°κ³ λ°νλλ κ°μ νΈμΆ 컨ν μ€νΈμ λ°νλμ΄ μ§λλ€. μ΄ κ²½μ°μ νΈμΆ 컨ν μ€νΈλ μ μ μ€ν 컨ν μ€νΈ μ λλ€. ν¨μ addTwoκ° μ μ μ€ν 컨ν μ€νΈμμ νΈμΆλμκΈ° λλ¬Έμ λλ€.
- μ§κΈ 4λ¨κ³ μ€ ν λΆλΆμ κ°μ Έ μ΅λλ€. λ³μ bλ λ°νλμ΄μ§ κ° (μ«μ 5)λ₯Ό μ»μ΄ ν λΉμ΄ λ©λλ€. μ¬μ ν μμ νλ‘κ·Έλ¨μ 6νμ μμ΅λλ€.
- μμΈν μ€λͺ νμ§λ μμ§λ§ 8νμμ λ³μ bμ λ΄μ©μ΄ μ½μμ 보μ¬μ§λλ€. μ΄ μμμλ μ«μ 5μ λλ€.
λ§€μ° κ°λ¨ν νλ‘κ·Έλ¨μ λν λ§€μ° κΈ΄ μ€λͺ μ΄μμ΅λλ€. μ½μ λ립λλ€. κ·Έλ¬λ λ¨Όμ λ€λ₯Έ μͺ½μ μ€λͺ ν΄μΌ ν©λλ€.
λ μ컬 μ€μ½ν
λ μ컬 μ€μ½νμ λν΄ μΌλΆλ₯Ό μ΄ν΄ν νμκ° μμ΅λλ€. μλμ μμ μ½λλ₯Ό λ΄ μλ€.
1: let val1 = 2
2: function multiplyThis(n) {
3: let ret = n * val1
4: return ret
5: }
6: let multiplied = multiplyThis(6)
7: console.log('example of scope:', multiplied)
μ΄ μμ΄λμ΄λ μ§μ μ€ν 컨ν μ€νΈ κ·Έλ¦¬κ³ μ μ μ€ν 컨ν μ€νΈμμμ λ³μλ₯Ό κ°μ§λλ€. μλ°μ€ν¬λ¦½νΈμμ μ΄λ €μ΄ μ μ λ³μλ₯Ό μ°Ύλ κ²μ λλ€. λ§μ½ μ§μ μ€ν 컨ν μ€νΈμμ λ³μλ₯Ό μ°Ύμ μ μλ€λ©΄, νΈμΆ 컨ν μ€νΈμμ λ³μλ₯Ό μ°Ύμ κ²μ λλ€. κ·Έλ¦¬κ³ λ§μ½ μ€ν 컨ν μ€νΈμμ λ³μλ₯Ό μ°Ύμ μ μλ€λ©΄ μ μ μ€ν 컨ν μ€νΈμμ μ°Ύμ λκΉμ§ λ°λ³΅ν©λλ€.(λ§μ½ μ μ μ€ν 컨ν μ€νΈμμ μ°Ύμ μ μλ€λ©΄ undefinedμ λλ€.) μμ μμ κ° λͺ νν©λλ€. λ§μ½ μ€μ½νμ λν΄μ μ΄ν΄νμ§ μμλ€λ©΄ μ΄ λΆλΆμ μ€ν΅ν΄λ λ©λλ€.
- μ μ μ€ν 컨ν μ€νΈμμ μλ‘μ΄ λ³μ val1μ μ μΈνκ³ μ«μ 2λ₯Ό ν λΉν©λλ€.
- 2ν-5ν. μλ‘μ΄ λ³μ multiplyThisλ₯Ό μ μΈνκ³ ν¨μλ₯Ό μ μν©λλ€.
- 6ν. μ μ μ€ν 컨ν
μ€νΈμ μλ‘μ΄ λ³μ
multiplied
μ μ μΈν©λλ€. - μ μ μ€ν 컨ν μ€νΈ λ©λͺ¨λ¦¬μμ λ³μ multiplyThisλ₯Ό κ²μνμ¬ ν¨μλ‘ μ€ννκ³ μ«μ 6μ μΈμλ‘ μ λ¬ν©λλ€.
- μλ‘μ΄ ν¨μ νΈμΆμ μλ‘μ΄ μ€ν 컨ν μ€νΈ μ λλ€. μλ‘μ΄ μ§μ μ€ν 컨ν μ€νΈκ° μμ±μ΄ λ©λλ€.
- μ§μ μ€ν 컨ν μ€νΈμμ λ³μ nμ΄ μ μΈμ΄ λκ³ μ«μ 6μ΄ ν λΉμ΄ λ©λλ€.
- 3ν. μ§μ μ€ν 컨ν μ€νΈμμ λ³μ retμ΄ μ μΈμ΄ λ©λλ€.
- 3ν (μμ§ μ§νμ€). λ κ°μ μ°μ°μλ‘ κ³±μ μ μνν©λλ€. λ³μ nκ³Ό val1. μ§μ μ€ν 컨ν μ€νΈμμ nλ³μλ₯Ό μ°Ύμ΅λλ€. 6λ¨κ³μμ μ μΈμ΄ λμ΄ μ§λλ€. μ΄ λ³Έλ¬Έμ μ«μ 6μ λλ€. μ§μ μ€ν 컨ν μ€νΈμμ val1μ κ°μ μ°Ύμ΅λλ€. μ§μ μ€ν 컨ν μ€νΈλ λ μ΄λΈλ val1μ κ°μ§κ³ μμ§ μμ΅λλ€. νΈμΆ 컨ν μ€νΈλ₯Ό νμΈν©λλ€. νΈμΆ 컨ν μ€νΈλ μ μ μ€ν 컨ν μ€νΈ μ λλ€. μ μ μ€ν 컨ν μ€νΈμμ val1μ μ°Ύμ΅λλ€. μ°Ύμμ΅λλ€.1λ¨κ³λ‘ μ μκ° λμμ΅λλ€. μ΄ κ°μ μ«μ 2μ λλ€.
- 3ν(μμ§ μ§νμ€). λκ°μ μ°μ°μλ‘ κ³±νκ³ ret λ³μμ ν λΉμ ν©λλ€.6 * 2 = 12.
ret
μ 12μ λλ€. - λ³μ retμ΄ λ°νμ΄ λμμ΅λλ€. μ§μ μ€ν 컨ν μ€νΈλ λ³μ retκ³Ό nκ³Ό ν¨κ» μλ©Έμ΄ λ©λλ€. λ³μ val1μ μμ§ μλ©Έλμ§ μμκ³ , μ μ μ€ν 컨ν μ€νΈμ μΌλΆλΆμΌλ‘ μ‘΄μ¬ ν©λλ€.
- 6νμΌλ‘ λμκ°λλ€. νΈμΆ 컨ν μ€νΈμμ μ«μ 12λ multiplied λ³μμ ν λΉμ΄ λ©λλ€.
- λ§μ§λ§μΌλ‘ 7ν, multiplied μ λ³μκ°μ΄ μ½μμ 보μ¬μ§λλ€.
λ°λΌμ μ΄ μμ μμλ ν¨μκ° νΈμΆ 컨ν μ€νΈμ μ μ λ λ³μμ μ κ·Όν μ μμμ κΈ°μ΅ν΄μΌ ν©λλ€. μ΄ κ²μ λ μ컬 μ€μ½νλΌκ³ ν©λλ€.
ν¨μλ₯Ό λ°ννλ ν¨μ
첫λ²μ§Έ μμ μμλ addTwo ν¨μκ° μ«μλ₯Ό λ°νν©λλ€. In the first example the function addTwo
returns a number. ν¨μλ 무μμ΄λ λ°νν μ μλ€λ κ²μ κΈ°μ΅ νμΈμ. μ΄μ ν¨μκ° ν¨μλ₯Ό λ°ννκ³ , ν΄λ‘μ λ₯Ό μ΄ν΄ν μ μλ νμ μμ μ
λλ€. λ€μμ λΆμν μμ μ
λλ€.
1: let val = 7
2: function createAdder() {
3: function addNumbers(a, b) {
4: let ret = a + b
5: return ret
6: }
7: return addNumbers
8: }
9: let adder = createAdder()
10: let sum = adder(val, 8)
11: console.log('example of function returning a function: ', sum)
λ¨κ³λ³λ‘ μ§ν νκ² μ΅λλ€.
- 1ν. μ μ μ€ν 컨ν μ€νΈμμ λ³μ valμ΄ μ μΈμ΄ λμ΄μ§κ³ μ«μ 7μ΄ ν λΉμ΄ λμ΄ μ§λλ€.
- 2νβ8ν. μ μ μ€ν 컨ν μ€νΈμ createAdderμ΄λ¦μΌλ‘ μ μΈμ΄ λμ΄μ§κ³ , μ μν ν¨μκ° ν λΉμ΄ λμ΄ μ§λλ€. 3νμμ 7νμ ν¨μ μ μλ₯Ό μ€λͺ ν©λλ€. κ·Έ μ μ μ΄ λΆλΆμμ ν¨μλ‘ λμ΄ κ°μ§ μμ΅λλ€. λ³μ (createAdder)μ μ μλ ν¨μκ° μ μ₯μ΄ λμ΄ μ§λλ€.
- 9ν. μ μ μ€ν 컨ν μ€νΈμ adderμ΄λ¦μ κ°μ§ μλ‘μ΄ λ³μλ₯Ό μ μΈν©λλ€. μΌλ°μ μΌλ‘ adderμ undefinedκ° ν λΉμ΄ λ©λλ€.
- μ¬μ ν 9ν. ();μ λ³Ό μ μμ΅λλ€. μ€ν λλ ν¨μ νΈμΆμ΄ νμ ν©λλ€. μ μ μ€ν 컨ν μ€νΈ λ©λͺ¨λ¦¬μ μ§μλ₯Ό νκ³ createAdderμ΄λ¦μ κ°μ§ λ³μλ₯Ό μ°Ύμ΅λλ€. μ΄κ²μ 2λ¨κ³μμ μμ±μ΄ λμ΄ μ§λλ€. κ·Έλ¦¬κ³ νΈμΆμ΄ λ©λλ€.
- ν¨μ νΈμΆ. 2νμμ. μλ‘μ΄ μ§μ μ€ν 컨ν μ€νΈλ μμ±μ΄ λμ΄μ§λλ€. μλ‘μ΄ μ€ν 컨ν μ€νΈμμ μ§μ λ³μκ° λ§λ€μ΄ μ§λλ€. μμ§μ μ½μ€νμ μλ‘μ΄ μ»¨ν μ€νΈλ₯Ό μΆκ° ν©λλ€. ν¨μλ μΈμ¬λ₯Ό κ°μ§κ³ μμ§ μμ΅λλ€. μ€λ₯Έμͺ½μΌλ‘ μ΄λνκ³ λ³Έλ¬ΈμΌλ‘ λ€μ΄κ°λλ€.
- μ¬μ ν 3-6ν. μλ‘μ΄ ν¨μλ₯Ό μ μΈν©λλ€. μ§μ μ€ν 컨ν μ€νΈμ addNumbers λ³μλ‘ μμ±ν©λλ€. μ΄ λΆλΆμ΄ μ€μ ν©λλ€. addNumbersλ μ§μ μ€ν 컨ν μ€νΈμμ νλλ§ μ‘΄μ¬ ν©λλ€.addNumbersμ΄λ¦μ κ°μ§ μ§μ λ³μμμ ν¨μκ° μ μλ κ²μ΄ μ μ₯λ©λλ€.
- 7ν. addNumbersμ λ³μμ λ³Έλ¬Έμ΄ λ°νλ©λλ€. μμ§μ addNumbersμ λ³μλ₯Ό μ°Ύκ³ , μ°Ύμ΅λλ€. ν¨μλ₯Ό μ μ ν©λλ€. μ’μ΅λλ€. ν¨μλ ν¨μλ₯Ό μ μν κ²μ ν¬ν¨νκ³ κ·Έ μ΄λκ²μ λ°νν μ μμ΅λλ€. λ°λΌμ addNumbersμ μ μν κ²μ λ°νν©λλ€. {} μ¬μ΄μ μλ κ²μ ν¨μ μ μλ₯Ό ꡬμ±ν©λλ€.λν νΈμΆ μ€νμμ λ‘컬 μ€ν 컨ν μ€νΈλ₯Ό μ κ±° ν©λλ€.
- λ°ν (return)νλ©΄ λ‘컬 μ€ν 컨ν μ€νΈκ° μμ λ©λλ€.addNumbers λ³μλ λ μ΄μ μμ΅λλ€. μ μν ν¨μλ μ¬μ ν μ‘΄μ¬νμ§λ§ ν¨μμμ λ°νλλ©° 'addr'μ ν λΉλ©λλ€. μ΄κ²μ 3λ¨κ³μμ λ³μκ° μμ±μ΄ λ©λλ€.
- 10ν. μ μ μ€ν 컨ν μ€νΈμμ μλ‘μ΄ λ³μ sumμ΄ μ μ ν©λλ€. μΌλ°μ μΌλ‘ undefinedμ ν λΉν©λλ€.
- λ€μμ ν¨μλ₯Ό μ€νν΄μΌν©λλ€. μ΄λ€ ν¨μ? addrλΌλ λ³μμ μ μλ ν¨μ. μ μ μ€ν 컨ν μ€νΈμμ μΆ©λΆν μ°Ύμ μ μμ΅λλ€. λ κ°μ§ νλΌλ―Έν°λ₯Ό μ·¨νλ ν¨μμ λλ€.
- λ κ°μ νλΌλ―Έν°λ₯Ό κ²μνμ¬ ν¨μλ₯Ό νΈμΆνκ³ , μ¬λ°λ₯Έ μΈμλ₯Ό μ λ¬ ν μ μμ΅λλ€. 첫λ²μ§Έλ 1λ¨κ³μμ μ μν λ³μ valμ΄λ©° μ«μλ 7μ΄κ³ λλ²μ§Έ μ«μ 8μ λλ€.
- μ΄μ μ΄ ν¨μλ₯Ό μ€νν΄μΌν©λλ€. ν¨μ μ μλ 3-5νμμ μμ½μ΄ λμ΄ μμ΅λλ€. μλ‘μ΄ λ‘컬 μ€ν 컨ν μ€νΈκ° μμ±λ©λλ€. λ‘컬 컨ν μ€νΈ λ΄μμ λ κ°μ μλ‘μ΄ λ³μμΈ aμ bκ° λ§λ€μ΄ μ§λλ€. μ΄μ λ¨κ³μμ ν¨μμ μ λ¬ μΈμ μ΄λ―λ‘ 7λ° 8κ°μ΄ ν λΉ λ©λλ€.
- 4ν. μ§μ μ€ν 컨ν μ€νΈμ μλ‘μ΄ λ³μ retμ μ μΈνμμ΅λλ€.
- 4ν. λ³μ aμ λ΄μ©κ³Ό λ³μ bμ λ΄μ©μ λν΄μ§κ³ , μ€νμ΄ λ©λλ€. ret λ³μμ λν΄μ§ κ²°κ³ΌμΈ 15κ° ν λΉμ΄ λμ΄ μ§λλ€.
- retλ³μλ ν¨μλ‘ λΆν° λ°νμ΄ λμ΄ μ§λλ€. λ‘컬 μ€ν 컨ν μ€νΈλ μλ©Έμ΄ λκ³ , μ΄κ²μ μ½μ€ν, λ³μ a, λ³μ b, retμ λ μ΄μ μ‘΄μ¬νμ§ μμ΅λλ€.
- λ°νκ°μ 9λ¨κ³μμ μ μν sumλ³μμ ν λΉλ©λλ€.
- μ½μμμ sumμ κ°μ΄ μΆλ ₯μ΄ λ©λλ€.
μμ λλ‘ μ½μμ 15κ° μΆλ ₯μ΄ λ κ²μ λλ€. μ€μ λ‘ λ§μ μΌμ΄ λ²μ΄μ§λλ€. μ¬κΈ°μ λͺ κ°μ§ μμ μ μ€λͺ νλ €κ³ ν©λλ€. 첫λ²μ§Έ, ν¨μ μ μλ λ³μμ μ μ₯λ μ μμΌλ©°, ν¨μ μ μλ νΈμΆλ λ κΉμ§ νλ‘κ·Έλ¨μ 보μ΄μ§ μμ΅λλ€. λμ§Έ, ν¨μκ° νΈμΆλ λλ§λ€ λ‘컬 μ€ν 컨ν μ€νΈκ° (μΌμμ μΌλ‘) μμ±λ©λλ€. ν΄λΉ μ€ν 컨ν μ€νΈλ κΈ°λ₯μ΄ μλ£λλ©΄ μ¬λΌμ§λλ€. ν¨μλ returnλλ λ«λ κ΄νΈ }κ° μμ λ μνλ©λλ€.
λ§μ§λ§, ν΄λ‘μ
λ€μ μ½λλ₯Ό μ΄ν΄λ³΄κ³ μ΄λ€ μΌμ΄ μΌμ΄λ μ§ μμ보μμμ€.
1: function createCounter() {
2: let counter = 0
3: const myFunction = function() {
4: counter = counter + 1
5: return counter
6: }
7: return myFunction
8: }
9: const increment = createCounter()
10: const c1 = increment()
11: const c2 = increment()
12: const c3 = increment()
13: console.log('example increment', c1, c2, c3)
μ΄μ λ μμ μμλ€λ£¨μμΌλ―λ‘ μ΄μ μ€νλ κ²°κ³Όλ₯Ό μμΈ‘ν μ μμ΅λλ€.
- 1νβ8ν. μλ‘μ΄ λ³μ createCounterμ μ μ μ€ν 컨ν μ€νΈμ μμ±νκ³ , μ μν ν¨μλ₯Ό ν λΉν©λλ€.
- 9ν. μ μ μ€ν 컨ν μ€νΈμ incrementμ΄λ¦μ κ°μ§ μλ‘μ΄ λ³μλ₯Ό μ μΈν©λλ€.
- λ€μ 9ν. creteCounterν¨μλ₯Ό νΈμΆν νμκ° μκ³ , incrementλ³μμ κ°μ ν λΉν©λλ€.
- 1νβ8ν. νΈμΆ ν¨μ. μλ‘μ΄ μ§μ μ€ν 컨ν μ€νΈλ₯Ό μμ±ν©λλ€.
- 2ν. μ§μ μ€ν 컨ν μ€νΈ μμμ, counter μ΄λ¦μ κ°μ§ μλ‘μ΄ λ³μλ₯Ό μ μΈν©λλ€. counterμ μ«μ 9κ° ν λΉμ΄ λμ΄ μ§λλ€.
- 3νβ6ν. myFunctionμ΄λ¦γ λ₯΄ κ°μ§ μλ‘μ΄ λ³μλ₯Ό μ μΈν©λλ€. λ³μλ μ§μ μ€ν 컨ν μ€νΈμ μ μΈμ΄ λμμ΅λλ€. λ³μμ λ³Έλ¬Έμ μμ§ λ€λ₯Έ ν¨μλ₯Ό μ μ ν©λλ€. 4νκ³Ό 5νμμ μ μλ₯Ό ν©λλ€.
- 7ν. myFunction λ³μμ λ³Έλ¬Έμ λ°νμ΄ λμμ΅λλ€. μ§μ μ€ν 컨ν μ€νΈλ μμ λμ΄ μ§λλ€. myFunction κ·Έλ¦¬κ³ counterλ λ μ΄μ μ‘΄μ¬νμ§ μμ΅λλ€. νΈμΆ 컨ν μ€νΈμμ λ°ν λλ κ²μ μ μ΄ν©λλ€.
- 9ν. νΈμΆ 컨ν μ€νΈ, μ μ μ€ν 컨ν μ€νΈ, κ°μ createCounterμ μν΄ λ°νμ΄ λκ³ incrementκ° ν λΉμ΄ λμ΄ μ§λλ€. λ³μλ μ¦κ°νκ³ ν¨μ μ μλ₯Ό ν¬ν¨νκ³ μμ΅λλ€. createCounterμ μν΄ λ°νμ΄ λμ΄μ§ ν¨μλ₯Ό μ μν©λλ€. λ μ΄λΈλ myFunctionμ΄ μ‘΄μ¬ νμ§ μμ΅λλ€. κ·Έλ¬λ κ°μ ν¨μ μ μλ₯Ό ν©λλ€. κΈλ‘λ² μ»¨ν μ€νΈμμ, κ·Έκ²μ incrementλ‘ λ μ΄λΈλμ΄ μμ΅λλ€.
- 10ν. μλ‘μ΄ λ³μλ₯Ό μ μΈν©λλ€.(
c1
) - 10ν(μμ§ μ§ν). increment λ³μλ₯Ό μ°ΎμΌλ ν¨μ μ λλ€. 4-5νμ μ μ λλλ‘ μ΄μ μ λ°νλ ν¨μ μ μκ° ν¬ν¨λ©λλ€.
- μλ‘μ΄ μ€ν 컨ν μ€νΈλ₯Ό μμ±ν©λλ€. νλΌλ―Έν°λ€μ΄ μμ΅λλ€. ν¨μλ₯Ό μ€ννκΈ° μμν©λλ€.
- 4ν.
counter = counter + 1
. μ§μ μ€ν 컨ν μ€νΈμμ counterλ³μλ₯Ό μ°Ύμ΅λλ€. μ΄ μ»¨ν μ€νΈλ₯Ό λ§λ€μκ³ μ§μ λ³μλ₯Ό μ μΈνμ§ μμμ΅λλ€. μ μ μ€ν 컨ν μ€νΈλ₯Ό μ°Ύμ΅λλ€. counterλ‘ λ μ΄λΈλ λ³μλ μ΄κ³³μ μμ΅λλ€. μλ°μ€ν¬λ¦½νΈλ counter = undefined +1μ κ³μ°ν κ²μ΄κ³ , counterλ‘ λ μ΄λΈλ μλ‘μ΄ λ³μλ₯Ό μ μΈνκ³ μ«μ 1μ ν λΉνκ³ undefinedμ 0κ³Ό κ°μ μ«μλ₯Ό ν λΉν©λλ€. - 5ν. counterμ λ³Έλ¬Έμ 리ν΄νκ±°λ μ«μ 1μ 리ν΄ν©λλ€. μ§μ μ€ν 컨ν μ€νΈ, counter λ³μκ° μλ©Έ λμμ΅λλ€.
- 10νμΌλ‘ 리ν΄μ΄ λ©λλ€. 리ν΄λ κ°(1)μ c1μ ν λΉν κ²μ μ»μ΅λλ€.
- 11ν. 10-14 λ¨κ³λ₯Ό λ°λ³΅ν©λλ€.
c2
λ λν 1μ μ»μ΅λλ€. - 12ν. 10-14 λ¨κ³λ₯Ό λ°λ³΅ν©λλ€. c3λ λν 1μ μ»μ΅λλ€.
- 13ν. c1, c2, c3μ λ³μμ λ³Έλ¬Έμ΄ λ‘κ·Έλ‘ μΆλ ₯ λ©λλ€.
κ° λΆλΆμμ μ΄λ€ μΌμ΄ λ°μνλμ§ νλ² μ΄ν΄λ³΄μΈμ. μ μ€λͺ μμ μμ μλ―μ΄ 1, 1, 1λ‘ μ½μμ λ³΄μ¬ μ§μ§ μμ΅λλ€. λμ μ 1, 2, 3μ΄ μ½μμ 보μ¬μ§λλ€. λ°λΌμ 무μμ μ£Όλμ?
μ΄μ¨λ μ¦κ° ν¨μλ μΉ΄μ΄ν° κ°μ κΈ°μ΅ ν©λλ€. μ΄λ»κ² λμνλμ?
counterλ μ μ μ€ν 컨ν μ€νΈμΈκ°μ? console.log(counter)μ μ λ ₯νλ©΄ undefinedμ μ»μ κ²μ λλ€. λ°λΌμ μ μ μ€ν 컨ν μ€νΈκ° μλλλ€.
μλ§λ incrementμ νΈμΆνλ©΄ μ΄λ»κ²λ incrementκ° μμ±λ ν¨μ(createCounter)λ‘ λμκ°λλ€. μ΄λ»κ² μλν κΉμ? incrementλ³μλ ν¨μ μ μλ₯Ό ν¬ν¨νκ³ μμ΅λλ€. κ·Έλμ κ·Έλ μ§ μμ΅λλ€.
κ·Έλμ λ€λ₯Έ λ©μ»€λμ¦μ΄ μμ΄μΌ ν©λλ€. ν΄λ‘μ . μμ΄λ²λ¦° μ‘°κ°μ λμ°© νμ΅λλ€.
μλ λ°©μμ λ€μκ³Ό κ°μ΅λλ€. μλ‘μ΄ ν¨μλ₯Ό μ μΈνκ³ λ³μμ ν λΉν λλ§λ€ ν¨μ μ μμ ν΄λ‘μ λ₯Ό μ μ₯ν©λλ€. ν΄λ‘μ λ ν¨μ μμ± μ μ€μ½ν λ΄μ μλ λͺ¨λ λ³μκ° ν¬ν¨λ©λλ€. λ°°λκ³Ό λΉμ·ν©λλ€. ν¨μ μ μλ μμ λ°°λκ³Ό ν¨κ» μ 곡λ©λλ€. κ·Έλ¦¬κ³ ν©μλ ν¨μ μ μκ° μμ±λ λ λ²μ λ΄μ μλ λͺ¨λ λ³μκ° μ μ₯λ©λλ€.
μμ μ€λͺ μ λͺ¨λ μλͺ»λμμ΅λλ€. μ΄λ²μλ λ€μ μλν΄λ³΄κ² μ΅λλ€.
1: function createCounter() {
2: let counter = 0
3: const myFunction = function() {
4: counter = counter + 1
5: return counter
6: }
7: return myFunction
8: }
9: const increment = createCounter()
10: const c1 = increment()
11: const c2 = increment()
12: const c3 = increment()
13: console.log('example increment', c1, c2, c3)
- 1νβ8ν. μ μ μ€ν 컨ν μ€νΈμμ createCounter μλ‘μ΄ λ³μλ₯Ό μμ±ν©λλ€. κ·Έλ¦¬κ³ ν¨μ μ μλ₯Ό ν λΉν©λλ€. μμ λμΌ ν©λλ€.
- 9ν. increment μ΄λ¦μ κ°μ§ μλ‘μ΄ λ³μλ₯Ό μ μ μ€ν 컨ν μ€νΈμ μ μΈν©λλ€. μμ λμΌν©λλ€.
- λ€μ 9ν. createCounter ν¨μ νΈμΆμ νμλ‘νκ³ , increment λ³μμ κ°μ ν λΉν©λλ€. μμ λμΌν©λλ€.
- 1νβ8ν . ν¨μμ νΈμΆ. μλ‘μ΄ μ§μ μ€ν 컨ν μ€νΈλ₯Ό μμ±ν©λλ€. μμ λμΌ ν©λλ€.
- 2ν. μ§μ μ€ν 컨ν μ€νΈ λ΄λΆμμ, counterμ΄λ¦μ κ°μ§ λ³μλ₯Ό μ μΈν©λλ€. μ«μ 0μ counterμ ν λΉλ©λλ€. μμ λμΌν©λλ€.
- 3νβ6ν. myFunctionμ΄λ¦μ κ°μ§ λ³μλ₯Ό μ μΈν©λλ€. μ§μ μ€ν 컨ν μ€νΈμ λ³μλ₯Ό μ μΈν©λλ€. λ³μμ λ³Έλ¬Έμ μμ§ λ€λ₯Έ ν¨μ μ μμ μμ΅λλ€. 4νμμ 5νμ μ μλ λλ‘ μ΄μ ν΄λ‘μ κ·Έλ¦¬κ³ ν¨μ μ μλ₯Ό μΌλΆλ‘ ν¬ν¨μ΄ λ©λλ€. ν΄λ‘μ λ λ²μ λ΄μ μλ λ³μ, μ΄ κ²½μ° counterμ ν¬ν¨ν©λλ€. (κ° 0κ³Ό ν¨κ»).
- 7ν. myFunction λ³μμ λ³Έλ¬Έμ λ°νν©λλ€. μ§μ μ€ν 컨ν μ€νΈλ μμ λ©λλ€. myFunction κ·Έλ¦¬κ³ counterμ λ μ΄μ μ‘΄μ¬νμ§ μμ΅λλ€. μ μ΄λ νΈμΆ 컨ν μ€νΈλ‘ 리ν΄λ©λλ€. κ·Έλμ ν¨μ μ μμ ν΄λ‘μ λ₯Ό, μ΄κ²μ΄ μμ± λμμ λ μ€μ½νμμ λ°±ν©κ³Ό λ³μλ₯Ό λ°νν©λλ€.
- 9ν. μ μ μ€ν 컨ν μ€νΈμΈ νΈμΆ 컨ν μ€νΈμμ createCounterμ μν΄ λ°νλ κ°μ incrementμ ν λΉμ΄ λμ΄ μ§λλ€. λ³μ incrementλ ν¨μ μ μμ ν΄λ‘μ κ° ν¬ν¨μ΄ λμ΄ μμ΅λλ€. createCounterμ λ°νλμ΄μ§ ν¨μλ₯Ό μ μ ν©λλ€. λ μ΄μ myFunctionμ΄λΌκ³ νμλμ§ μμ§λ§ κ°μ μ μ μ λλ€. κΈλ‘λ² μ»¨ν μ€νΈμμ incrementκ° νΈμΆλ©λλ€.
- 10ν. μλ‘μ΄ λ³μλ₯Ό μ μΈν©λλ€(
c1
). - 10ν (κ³μ μ§ν). incrementλ³μλ₯Ό μ°Ύμ보면 ν¨μ μ λλ€. 4-5νμ μ μλ λλ‘ μ΄μ μ λ°νλ ν¨μ μ μλ₯Ό ν¬ν¨ν©λλ€.(κ·Έλ¦¬κ³ μ΄κ² λν λ°±ν©κ³Ό λ³μλ₯Ό ν¬ν¨ν©λλ€.)
- μλ‘μ΄ μ€ν 컨ν μ€νΈλ₯Ό μμ±ν©λλ€. νλΌλ―Έν°λ₯Ό κ°μ§κ³ μμ§ μμ΅λλ€. ν¨μμ μ€νμ μμν©λλ€.
- 4ν.
counter = counter + 1
.counterλ³μλ₯Ό μ°Ύλ κ²μ΄ νμν©λλ€. μ§μ λλ μ μ μ€ν 컨ν μ€νΈμμ μ°ΎκΈ° μ μ, λ°±ν©μ μ°Ύμλ΄ λλ€. ν΄λ‘μ λ₯Ό νμΈν©λλ€. Lo κ·Έλ¦¬κ³ behold, ν΄λ‘μ λ counterμ΄λ¦μ κ°μ§ λ³μλ₯Ό ν¬ν¨νκ³ μκ³ κ°μ 0 μ λλ€. 4νμμμ ννμ μ΄ν κ°μ 1μ΄ μ ν μ΄ λμ΄ μ§λλ€. κ·Έλ¦¬κ³ λ°±ν©μ λ€μ μ μ₯μ΄ λ©λλ€. ν΄λ‘μ λ μ§κΈ λ³μcounter κ·Έλ¦¬κ³ κ°μ 1μ ν¬ν¨νκ³ μμ΅λλ€. - 5ν. counterμ λ³Έλ¬Έ λλ μ«μ 1μ λ°νν©λλ€. μ§μ μ€ν 컨ν μ€νΈκ° μλ©Έλ©λλ€.
- 10νμΌλ‘ λμκ°λλ€. λ°νλ κ° 1μ c1μ ν λΉλ©λλ€.
- 11ν. 10λ¨κ³μμ λΆν° 14λ¨κ³κΉμ§λ₯Ό λ°λ³΅ν©λλ€. μ΄λ²μλ ν΄λ‘μ λ₯Ό 보면 counterλ³μμ κ°μ΄ 1μ΄λΌλ κ²μ μ μ μμ΅λλ€. νλ‘κ·Έλ¨μ 12λ¨κ³ λλ 4νμμ μ€μ μ΄ λμμ΅λλ€. κ·Έκ²μ κ°μ μ¦κ° ν¨μμ ν΄λ‘μ μμ μ¦κ°νκ³ 2λ‘ μ μ₯μ΄ λ©λλ€. κ·Έλ¦¬κ³ c2μλ 2κ° ν λΉλ©λλ€.
- 12ν. 10λ¨κ³μμ 14λ¨κ³κΉμ§λ₯Ό λ°λ³΅ν©λλ€. c3μ 3μ΄ ν λΉλ©λλ€.
- 13ν. c1, c2, c3 λ³μμ λ³Έλ¬Έμ΄ μ½μμ 보μ¬μ§λλ€.
μ΄μ μ΄κ²μ΄ μ΄λ»κ² μλνλμ§ μ΄ν΄ν μ μμ΅λλ€. κΈ°μ΅ν΄μΌν ν΅μ¬μ ν¨μκ° μ μΈλ λ ν¨μ μ μμ ν΄λ‘μ λ₯Ό ν¬ν¨νλ€λ κ²μ λλ€. ν΄λ‘μ λ ν¨μ μμ± μ λ²μμ μλ λͺ¨λ λ³μμ λͺ¨μμ λλ€.
μ μ λ²μμμ μμ±λ ν¨μ μ‘°μ°¨λ μ΄λ€ ν¨μμ ν΄λ‘μ κ° μμ΅λκΉ? λλ΅μ μμ λλ€. μ μ λ²μμμ μμ±λ ν¨μλ ν΄λ‘μ λ₯Ό λ§λλλ€. κ·Έλ¬λ μ΄λ¬ν ν¨μλ μ μ λ²μμμ μμ± λμμΌλ―λ‘ μ μ λ²μμ λͺ¨λ λ³μμ μ‘μΈμ€ν μ μμ΅λλ€. ν΄λ‘μ κ°λ μ μ€μ λ‘ κ΄λ ¨μ΄ μμ΅λλ€.
ν¨μκ° ν¨μλ₯Ό λ°νν λ, μ¦ ν΄λ‘μ κ°λ μ΄ λ κ΄λ ¨μ±μ΄ λ λμμ§λλ€. λ°νλ ν¨μλ μ μ λ²μμ μλ λ³μμ μ‘μΈμ€ ν μ μμ§λ§ ν΄λ‘μ μλ§ μ‘΄μ¬ν©λλ€.
μ¬μν ν΄λ‘μ λ μλλλ€.
λμΉ μ±μ§ λͺ»ν λλ μ’ μ’ ν΄λ‘μ κ° λνλ©λλ€. λΆλΆ μ ν리μΌμ΄μ μ΄λΌκ³ νλ μμ λ₯Ό λ³΄μ ¨μ κ²μ λλ€. λ€μ μ½λμ κ°μ΄.
let c = 4
const addX = x => n => n + x
const addThree = addX(3)
let d = addThree(c)
console.log('example partial application', d)
νμ΄ν ν¨μμΈ κ²½μ°κ° μ¬κΈ°μ ν΄λΉ ν©λλ€.
let c = 4
function addX(x) {
return function(n) {
return n + x
}
}
const addThree = addX(3)
let d = addThree(c)
console.log('example partial application', d)
νλμ 맀κ°λ³μ (x)λ₯Ό μ¬μ©νκ³ λ€λ₯Έ ν¨μλ₯Ό λ°ννλ μΌλ° addrν¨μ addXλ₯Ό μ μΈν©λλ€.
리ν΄λ ν¨μλ νλμ λ§€κ° λ³μλ₯Ό κ°μ§κ³ μμ λ³μ xμ μΆκ°ν©λλ€.
λ³μ xλ ν΄λ‘μ μ μΌλΆ μ λλ€. 'addThree' λ³μκ° μ§μ 컨ν μ€νΈμμ μ μΈλλ©΄ ν¨μ μ μμ ν΄λ‘μ κ° ν λΉλ©λλ€. ν΄λ‘μ λ λ³μ xλ₯Ό ν¬ν©ν©λλ€.
μ΄μ addThreeκ° νΈμΆλμ΄ μ€νλ λ, λ³μλ ν΄λ‘μ μμ λ³μ xμ μΈμλ‘ μ λ¬λ λ³μ nμ μ‘μΈμ€ ν μ μμΌλ©° sumμ 리ν΄ν μ μμ΅λλ€.
μ΄ μμ μμ μ½μμ μ«μ 7μ μΈμν©λλ€.
κ²°λ‘
ν΄λ‘μ λ₯Ό κΈ°μ΅νλ λ°©λ²μ λ°°λ λΉμ λ₯Ό ν΅νλ κ²μ λλ€. ν¨μκ° λ§λ€μ΄μ§κ³ λ€λ₯Έ ν¨μμμ μ λ¬λκ±°λ λ°νλλ©΄ λ°°λκ³Ό ν¨κ» λ°°λμ μ΄λ°ν©λλ€. κ·Έλ¦¬κ³ λ°°λμλ ν¨μκ° μ μΈ λμμ λ μ€μ½ν λ΄μ μλ λͺ¨λ λ³μκ° μμ΅λλ€.
λ§μ½ μ΄ κΈμ΄ μ¦κ±°μ λ€λ©΄ λ°μλ₯Ό μμ§ λ§μΈμ. π κ°μ¬ν©λλ€.