๐ ๋ฉ์๋ ๋ด๋ถ ํจ์์์ this๋ฅผ ์ฐํํ๋ ๋ฐฉ๋ฒ 4๊ฐ์ง
๋ง์ฝ, scope chain์ฒ๋ผ ๋ณ์๊ฐ ์์ ๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์ค์ฝํ์ Lexical Environment๋ฅผ ์ฐพ๊ณ , ๊ฑฐ๊ธฐ๋ ์์ผ๋ฉด ์์ ์ค์ฝํ๋ฅผ ํ์ํ๋ฏ์ด this๋ ํธ์ถ ์ฃผ์ฒด๊ฐ ์์ ๋๋ ์๋์ผ๋ก ์ ์ญ ๊ฐ์ฒด๋ฅผ ๋ฐ์ธ๋ฉํ์ง ์๊ณ ํธ์ถ ๋น์ ์ฃผ๋ณ ํ๊ฒฝ์ this๋ฅผ ์์ํ๊ณ ์ถ๋ค๋ฉด ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ๊น? ํ์ฌ ์ปจํ
์คํธ์ ๋ฐ์ธ๋ฉ๋ ๋์์ด ์์ผ๋ฉด ์ง์ ์ปจํ
์คํธ์ this๋ฅผ ๋ฐ๋ผ๋ณด๋ ๊ฒ์ฒ๋ผ ๋ง์ด๋ค. ์์ฝ๊ฒ๋ ES5 ๊น์ง๋ ์์ฒด์ ์ผ๋ก ๋ด๋ถํจ์์ this๋ฅผ ์์ํ ๋ฐฉ๋ฒ์ ์์ง๋ง ์ฐํํ๋ ๋ฐฉ๋ฒ์ ์๋ค.
์ง๊ธ๋ถํฐ ๋ฉ์๋์ ๋ด๋ถ ํจ์์์ ๋ฉ์๋์ this๋ฅผ ๊ทธ๋๋ก ๋ฐ๋ผ๋ณด๊ฒ ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ 4๊ฐ์ง๋ฅผ ์์๋ณด์. ๊ทธ๋ฆฌ๊ณ ES6์์ this๋ฅผ ๋ฐ์ธ๋ฉํ์ง ์๊ณ ์์ ์ค์ฝํ์ this๋ฅผ ๊ทธ๋๋ก ํ์ฉ๊ฐ๋ฅํ ํ์ดํ ํจ์(arrow-function)๋ก๋ ์ฌ์ฉํ ์ฝ๋๋ฅผ ์ดํด๋ณด์. ๊ฒฐ๊ณผ๋ ๋ชจ๋ ๋์ผํ๋ค.
this๋ณ์ ์ ์ฅcallbindํ์ดํํจ์
// this ๋ณ์ ์ ์ฅ
var obj = {
outer: function () {
console.log(this);
var self = this;
var innerFunc = function () {
console.log(self);
};
innerFunc();
},
};
obj.outer();
// call
var obj = {
outer: function(){
console.log(this);
var innerFunc = function(){
console.log(this);
}
innerFunc.call(this);
}
}
obj.outer();
// bind
var obj = {
outer: function(){
console.log(this);
var innerFunc = function(){
console.log(this);
}.bind(this);
innerFunc();
}
}
obj.outer();
// arrow Function
var obj = {
outer: function () {
console.log(this);
var innerFunc = () => {
console.log(this);
};
innerFunc();
},
};
obj.outer();
๐๐ฝ { outer: [Function: outer] }
๐๐ฝ { outer: [Function: outer] }
reference
๋๊ธ