๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ JavaScript

JavaScript์˜ this์™€ ๋ฐ”์ธ๋”ฉ , ํ™”์‚ดํ‘œํ•จ์ˆ˜๊ฐ€ ์ƒ๊ฒจ๋‚˜๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ

by Tamii 2022. 6. 22.
๋ฐ˜์‘ํ˜•

this

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๊ฒฐ์ •๋œ๋‹ค

 

< ์ „์—ญ๊ณต๊ฐ„์—์„œ์˜ this >

  • ๋ธŒ๋ผ์šฐ์ € : window
  • Node.js : global

< ์ „์—ญ๊ฐ์ฒด >

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ํŠน์ • ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์ด๋‹ค.

ํŠน์ • ๊ฐ์ฒด : ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ (Lexical Environment)

 

์‹คํ–‰์ปจํ…์ŠคํŠธ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ง‘ํ•ด์„œ LE์˜ ํ”„๋กœํผํ‹ฐ๋กœ ์ €์žฅ

์–ด๋–ค ๋ณ€์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋‹นํ–ˆ์„ ๋•Œ LE์˜ ํ”„๋กœํผํ‹ฐ์—์„œ ๊ฐ’์„ ์กฐํšŒํ•ด๋ด„

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์™€ ์ „์—ญ๋ฒผ์ˆ˜๋กœ ์„ ์–ธํ•œ ๊ฒƒ์ด ๊ฐ™์„๊นŒ?

=   window.a์™€ var a๊ฐ€ ๊ฐ™์„๊นŒ?

 

ํ• ๋‹นํ•  ๋•Œ๋Š” ๋ณ„๋‹ค๋ฅธ ์ฐจ์ด๊ฐ€ ๋ณด์ด์ง€ ์•Š์ง€๋งŒ ์‚ญ์ œ๋ฅผ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

var a = 'tami'
delete a;

console.log(a) // tami


window.a= 'tami'
delete window.a;

console.log(a) // Uncalught ReferecneErrror ( a is not defined)

๋ฐ”๋กœ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜๊ฒŒ ๋˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์—์„œ ์ž๋™์œผ๋กœ ์ „์—ญ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ ํ• ๋‹นํ•˜๋ฉด์„œ ๊ทธ ํ”„๋กœํผํ‹ฐ 

1. ๋ณ€์ˆ˜๋กœ ์„ ์–ธ

2. ( ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด )์ „์—ญ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ ํ• ๋‹น๋จ 

3. ํ”„๋กœํผํ‹ฐ์˜ configurable์†์„ฑ์„ false๋กœ ์ •์˜

  configurable :  ๋ณ€๊ฒฝ ๋ฐ ์‚ญ์ œ ๊ฐ€๋Šฅ์„ฑ

 

 

ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ• 2๊ฐ€์ง€  - ๋ฉ”์„œ๋“œ์™€ ํ•จ์ˆ˜

var foo = function(x){
	console.log(x, this)
}

foo(1) // ํ•จ์ˆ˜๋กœ ์‹คํ–‰ 1,Window


var obj ={
	method: foo
}

obj.foo(1) // ๋ฉ”์„œ๋“œ๋กœ ์‹คํ–‰ 1,{ method: f}

 

ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ : this๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์Œ  -> this๋Š” ์ „์—ญ ๊ฐ์ฒด๋กœ ์ž๋™ bind

๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœ: this๊ฐ€ ์ง€์ •๋จ 

 

์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š”๊ฑด ํ˜ธ์ถœ ์ฃผ์ฒด๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ์—†์„ ๋•Œ ์ž๋™์œผ๋กœ ์ „์—ญ๊ฐ์ฒด๋กœ ๋ฐ”์ธ๋”ฉ ํ•˜์ง€  ์•Š๊ณ  ์ฃผ๋ณ€ํ™˜๊ฒฝ์˜ this๋ฅผ ์ƒ์†๋ฐ›์•˜์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

 

var obj = {
	
    method : functoin(){
    	console.log(this) // { method: f }
        
        var innerFoo = function () {
        	console.log(this) // Window 
        }
        
        innerFoo();
        
    }
}

์ด๋ ‡๊ฒŒ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์š”.

var obj = {
	
    method : functoin(){
    	console.log(this) // { method: f }
        
        
        var self = this; //  1. ์Šค์ฝ”ํ”„์—์„œ self์— this๋ฅผ ์ €์žฅํ•˜๋ฉด 
        var innerFoo = function () {
        	console.log(self) // {method: f }   // 2. ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
        }
        
        innerFoo();
        
    }
}

๊ทธ๋ž˜์„œ ES6์—์„œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๊ฐ€ ์ƒ๊ฒจ๋‚˜๊ฒŒ ๋˜์—ˆ๋‹ค.

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์œ„์˜ ์šฐํšŒ๋ฒ•์ด ํ•„์š” ์—†์–ด์ง‘๋‹ˆ๋‹ค!

 

 

 

๋ช…์‹œ์ ์œผ๋กœ this ๋ฐ”์ธ๋”ฉ ํ•˜๊ธฐ 

  1. ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•œ ์šฐํšŒ๋ฒ•
  2. call ,bind ,apply
var obj = {
	
    method : functoin(){
    	console.log(this) // { method: f }
        
        var innerFoo = function () {
        	console.log(self) // {method: f }   // ํ•จ์ˆ˜์— this๋ฅผ ๋ฏธ๋ฆฌ ์ ์šฉ 
        }.bind(this)
        
        innerFoo();
        
    }
}

 

 

๋Œ“๊ธ€