π μΌλ° ν¨μ
const foo = function () { console.log('μΌλ° ν¨μ'); }
π νμ΄ν ν¨μ
const foo = () => console.log('νμ΄ν ν¨μ');
λ ν¨μλ κΈ°λ₯μ μΌλ‘ μμ ν λμΌνκ² μλν©λλ€.
JavaScript μΌλ° ν¨μμ this λ°μΈλ©
const cat = { name: 'meow', foo1: function() { const foo2 = function() { console.log(this.name); // undefined } foo2(); } }; cat.foo1(); // undefined
- μΌλ° ν¨μμμ thisλ ν¨μκ° νΈμΆλ λ ν¨μκ° μ΄λμμ νΈμΆλμλμ§μ λ°λΌ λμ μΌλ‘ κ²°μ λλ©°, νΈμΆλ 컨ν μ€νΈμ λ°μΈλ©λ©λλ€.
- μ μμ€μ½νμμ μ€ν(μ μΈ)μ΄ λμ΄ foo2 λ΄λΆμ thisλ μ§μ λμ§ μμμ κ³§ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€κ² λ©λλ€.
- λ΄λΆ ν¨μμ thisλ μ μ κ°μ²΄(window)λ₯Ό κ°λ¦¬ν€λ―λ‘ μ μ κ°μ²΄μ nameμ΄λ μμ±μ μ‘΄μ¬νμ§ μμ undefined μΆλ ₯ λ©λλ€.
- μ΄ λ΄λΆν¨μκ° globalμμλ μ λλ‘ μλνκΈ° μν΄μ μ°λ¦¬λ μ λ΄λΆν¨μμ κ°μ²΄μ thisλ₯Ό λ°μΈλ© ν νμκ° μμ κ²μ λλ€.
JavaScript νμ΄ν ν¨μμ this λ°μΈλ©
const cat = { name: 'meow', foo1: function() { const foo2 = () => { console.log(this.name); } foo2(); } }; cat.foo1(); // meow
μ μ½λμ λ¬λΌμ§ μ μ cat κ°μ²΄μ λ΄λΆν¨μ foo2κ° νμ΄ν ν¨μλ‘ μ μΈλλ€λ μ λΏμ
λλ€. κ·Έλ°λ° μ΄λ²μ μ°λ¦¬κ° μλνλλ‘ meowκ° μ μ°νμ΅λλ€. μ΄λ»κ² κ°λ₯νκ±ΈκΉμ?
νμ΄ν ν¨μμμ thisλ ν¨μκ° μ μλ μ€μ½νμμ μμλ©λλ€. (Lexical this) λ΄λΆ ν¨μμ thisλ μΈλΆ ν¨μμ thisλ₯Ό μμλ°μ catμ κ°λ¦¬ν€λ―λ‘ meow μΆλ ₯ λ©λλ€.
νμ΄ν ν¨μμμ thisλ ν¨μκ° μ μλ μ€μ½νμμ μμλ©λλ€. (Lexical this) λ΄λΆ ν¨μμ thisλ μΈλΆ ν¨μμ thisλ₯Ό μμλ°μ catμ κ°λ¦¬ν€λ―λ‘ meow μΆλ ₯ λ©λλ€.
addEventListener()μ μ½λ°±ν¨μ
μλ addEventListenerμ μ½λ°±ν¨μμμλ thisμ ν΄λΉ μ΄λ²€νΈ 리μ€λκ° νΈμΆλ μ리먼νΈκ° λ°μΈλ©λλλ‘ μ μλμ΄ μμ΅λλ€. κ·Έλ¬λ νμ΄ν ν¨μλ₯Ό μ¬μ©ν κ²½μ°, μ΄λ―Έ thisμ κ°μ΄ μ ν΄μ Έ μλ μ½λ°±ν¨μμ κ²½μ° κΈ°μ‘΄ λ°μΈλ© κ°μ΄ μ¬λΌμ§κ³ μμ μ€μ½ν(μ΄ κ²½μ°μ μ μ κ°μ²΄)κ° λ°μΈλ©λκΈ° λλ¬Έμ μλνλ λλ‘ λμνμ§ μμ μ μμ΅λλ€. λ¬Όλ‘ μμ μ€μ½νμ μμ±λ€μ μ°λ €κ³ μλν κ²½μ°λΌλ©΄ μ¬μ©ν μ μμ΅λλ€.
const button = document.getElementById('myButton'); // νμ΄ν ν¨μ μ¬μ© (λΉκΆμ₯) button.addEventListener('click', () => { console.log(this); // Window this.innerHTML = 'clicked'; // μ μ κ°μ²΄(window)μ innerHTMLμ λ³κ²½ }); // μΌλ° ν¨μ μ¬μ© button.addEventListener('click', function() { console.log(this); // button μλ¦¬λ¨ΌνΈ this.innerHTML = 'clicked'; // ν΄λΉ λ²νΌμ innerHTMLμ λ³κ²½ });
- νμ΄ν ν¨μμ κ²½μ°, thisκ° ν΄λΉ μ΄λ²€νΈ 리μ€λλ₯Ό νΈμΆν λ¬Έλ§₯μ΄ μλ μμ μ€μ½νμ thisλ₯Ό κ°λ¦¬ν€λ―λ‘ λΉμΆμ²ν©λλ€.
- μΌλ° ν¨μλ₯Ό μ¬μ©νλ©΄ thisλ ν΄λΉ μ΄λ²€νΈκ° λ°μν μ리먼νΈλ₯Ό κ°λ¦¬ν€λ©°, λ²νΌμ innerHTMLμ λ³κ²½νλ λ±μ μμ μ΄ μλν λλ‘ λμν©λλ€.
μμ μμμμλ νμ΄ν ν¨μλ₯Ό μ¬μ©ν κ²½μ° thisκ° Windowλ₯Ό κ°λ¦¬ν€λ―λ‘ λ²νΌμ innerHTMLμ λ³κ²½νλ λμμ΄ μλμ λ€λ¦
λλ€. λ°λΌμ μΌλ° ν¨μλ₯Ό μ¬μ©νμ¬ μ½λ°±ν¨μλ₯Ό μ μνλ κ²μ΄ λ°λμ§ν©λλ€.