๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Frontend/JavaScript

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ this๋ฅผ ์šฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ• 4๊ฐ€์ง€

by YWTechIT 2021. 9. 8.
728x90

๐Ÿ“ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ this๋ฅผ ์šฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ• 4๊ฐ€์ง€

๋งŒ์•ฝ, scope chain์ฒ˜๋Ÿผ ๋ณ€์ˆ˜๊ฐ€ ์—†์„ ๋•Œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์Šค์ฝ”ํ”„์˜ Lexical Environment๋ฅผ ์ฐพ๊ณ , ๊ฑฐ๊ธฐ๋„ ์—†์œผ๋ฉด ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋“ฏ์ด this๋„ ํ˜ธ์ถœ ์ฃผ์ฒด๊ฐ€ ์—†์„ ๋•Œ๋Š” ์ž๋™์œผ๋กœ ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜์ง€ ์•Š๊ณ  ํ˜ธ์ถœ ๋‹น์‹œ ์ฃผ๋ณ€ ํ™˜๊ฒฝ์˜ this๋ฅผ ์ƒ์†ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ• ๊นŒ? ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์— ๋ฐ”์ธ๋”ฉ๋œ ๋Œ€์ƒ์ด ์—†์œผ๋ฉด ์ง์ „ ์ปจํ…์ŠคํŠธ์˜ this๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค. ์•„์‰ฝ๊ฒŒ๋„ ES5 ๊นŒ์ง€๋Š” ์ž์ฒด์ ์œผ๋กœ ๋‚ด๋ถ€ํ•จ์ˆ˜์— this๋ฅผ ์ƒ์†ํ•  ๋ฐฉ๋ฒ•์€ ์—†์ง€๋งŒ ์šฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์žˆ๋‹ค.

 

์ง€๊ธˆ๋ถ€ํ„ฐ ๋ฉ”์„œ๋“œ์˜ ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ ๋ฉ”์„œ๋“œ์˜ this๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ”๋ผ๋ณด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• 4๊ฐ€์ง€๋ฅผ ์•Œ์•„๋ณด์ž. ๊ทธ๋ฆฌ๊ณ  ES6์—์„œ this๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜์ง€ ์•Š๊ณ  ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ๊ฐ€๋Šฅํ•œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(arrow-function)๋กœ๋„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž. ๊ฒฐ๊ณผ๋Š” ๋ชจ๋‘ ๋™์ผํ•˜๋‹ค.

 

  1. this ๋ณ€์ˆ˜ ์ €์žฅ
  2. call
  3. bind
  4. ํ™”์‚ดํ‘œํ•จ์ˆ˜

 

728x90

 

// 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

  1. ์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ - ์ •์žฌ๋‚จ
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€