๋ณธ ํฌ์คํ ์ ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ๋ ์ฑ ์ ์ฃผ์ ๋ก 27๊ธฐ SOPT ์๊ธ์ฑ ์คํฐ๋์ ์ ์ฌํ๋์ ๋ฐํ์๋ฃ๋ฅผ ์ฌ๊ตฌ์ฑํ์ฌ ์์ฑํ์์ต๋๋ค!
JavaScript์์๋ ์ ์ธํ ๋ ๊ฒฐ์ ๋๋ ๋ถ๋ถ๊ณผ ํธ์ถํ ๋ ๊ฒฐ์ ๋๋ ๋ถ๋ถ์ด ์๋ค.
this๋ ํธ์ถํ ๋ ๊ฒฐ์ ๋๋ ๊ฒ์ธ๋ฐ, this๋ผ๋ ๊ฐ์ ํจ์๋ฅผ ์ด๋ป๊ฒ ์คํ์ํค๋๋์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง๋ค.
์ด ์ฃผ์ ๋ฅผ ๋ฐฐ์ฐ๋ ์ด์ ๋ this์ ๊ฐ์ ํ๋ณํ ๋ ์ด๋ ค์์ ๊ฒช๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, this์ ๊ฐ์ด ๊ฒฐ์ ๋๋ 4๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์ ์ฐ์ตํ๋ค๋ฉด, this์ ๊ฐ์ ํ๋ณํ ๋ ๋์์ด ๋๋ค.
- ํ ๋จธ๋: ๋๋ ํ๋ฆฌ๊ฐ ์ํ๋ค (
๋ === ํ ๋จธ๋
)- ์๋ฒ์ง: ๋๋ ๋ค๋ฆฌ๊ฐ ์ํ๋ค (
๋ === ์๋ฒ์ง
)- ์ด๋จธ๋: ๋๋ ๋จธ๋ฆฌ๊ฐ ์ํ๋ค (
๋ === ์ด๋จธ๋
)
JS์์ this๋ ์์ ๋ฌธ์ฅ ์ '๋'์ ๋น์ทํ๋ค. ์ด๋ค ๋ฌธ๋งฅ์ด๋์ ๋ฐ๋ผ ๊ทธ ์๋ฏธ(๊ฐ)๊ฐ ๋ณํ๋ค.
๋ฐ๋ผ์ '๋'๋ this์ ๋น์ทํ ๋ฌธ๋งฅ์ด๋ค.
์ฆ this๋ ์ด๋ป๊ฒ ์คํํ๋์ ๋ฐ๋ผ์ this์ ๊ฐ์ด ๋ฐ๋๊ฒ ๋๋ค!
์คํํ๋ ๋ฐฉ๋ฒ์๋ 4๊ฐ์ง๊ฐ ์๋ค.
- ์ผ๋ฐํจ์ ์คํ๋ฐฉ์
- Dot Notation ์คํ๋ฐฉ์
- ๋ฉ์๋(
call()
apply()
bind()
)๋ฅผ ์ด์ฉํ ์คํ๋ฐฉ์- new๋ฅผ ์ด์ฉํ ์คํ๋ฐฉ์
์ฆ, ์ด 4๊ฐ์ง ์ค ์ด๋ค ๋ฐฉ์์ผ๋ก ์คํํ๋๋์ ๋ฐ๋ผ this์ ๊ฐ์ ๋ฐ๋๋ค.
์ ์ญ๊ณต๊ฐ์์ this๋ ์ ์ญ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์ ์ญ๊ฐ์ฒด๋ window์ด๋ค.
function foo(){
console.log(this); // 'this' === global object (๋ธ๋ผ์ฐ์ ์์์๋ window ๊ฐ์ฒด)
}
foo();
์๋ฌด ํน์ด์ ์์ด ๊ทธ๋ฅ ํจ์๋ฅผ ์คํ ์ํค๋ ๊ฒฝ์ฐ์ด๋ค. ์ด๋ ๊ฒ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ๋ก ํจ์๋ฅผ ์คํ์ํค๋ ์ผ๋ฐํจ์ ์คํ๋ฐฉ์์์ this ๋ global object๊ฐ ๋๋ค. ( ๋ธ๋ผ์ฐ์ ์์์๋ window ๊ฐ์ฒด )
์์ธ) strict mode
// ์๊ฒฉํ mode
'use strict';
let name = 'ken';
function foo(){
console.log(this.name); // 'this' === undefined
}
foo();
์ฌ์ค์ ๊ฐ๋ฐ์๋ค์ด this๋ฅผ ์ฌ์ฉํ ๋ window ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ค๊ณ this๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์๋ค. ๋ฐ๋ผ์ ์ผ๋ฐํจ์ ์คํ๋ฐฉ์์์ 'use strict'
๋ชจ๋์์ this๋ window๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค์ง ์๊ณ , undefined
๊ฐ ๋๋ค.
์ฌ๊ธฐ์ undefined ๋ผ๋ ๊ฒ์ ๊ฐ์ฒด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ undefined ์ name
์์ฑ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
ํต์ฌ์ ํจ์๊ฐ ์คํ๋๋ ๋ถ๋ถ์ ์ฐพ๋ ๊ฒ์ด๋ค.
// example 1
let age = 100;
function foo(){
let age = 99;
bar();
}
function bar() {
console.log(this.age);
}
foo();
์ฌ๊ธฐ์ foo()
๋ฅผ ์คํ์ํค๋ฉด bar()
๊ฐ ์คํ๋ ๋ ์ผ๋ฐํจ์ ์คํ ๋ฐฉ์์ผ๋ก ์คํํ๊ธฐ ๋๋ฌธ์ this.age
์ this๋ window ๊ฐ์ฒด๊ฐ ๋๋ค!
๊ฐ๋จํ๊ฒ ์๊ฐํ์, this๋ผ๋ ๊ฐ์ ์ฐ๋ ํจ์๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์คํ ๋๋์ง๋ฅผ ๋ดค์ ๋, ๊ทธ ๋ถ๋ถ์ด ์ผ๋ฐํจ์ ์คํ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์, ์ฆ this๊ฐ window์ด๊ธฐ ๋๋ฌธ์ global ๋จ๊ณ์ ๊ฐ์ธ 100์ด ๋์ค๊ฒ ๋๋ค.
ํต์ฌ์ ํจ์๊ฐ ์คํ๋๋ ๋ถ๋ถ์ ์ฐพ๋ ๊ฒ!
// example 2
let baseBall = 4;
function foo(){
let baseBall = 3;
bar();
}
function bar() {
console.log(this.baseBall);
}
foo(); // ?
์ฒซ๋ฒ์งธ ๋ฐฉ์ ์ผ๋ฐํจ์ ์คํ๋ฐฉ์ ์ ๋ฆฌ
- ์ผ๋ฐํจ์ ์คํ๋ฐฉ์ โ this๋ ์ ์ญ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- strict mode ์์๋ this ๋ฒ๊ทธ๋ฅผ ๋ง๊ธฐ์ํด
undefined
๋ก ์ฒ๋ฆฌ๋๋ค.- 2๊ฐ์ง ์์ ์์ ๋ณธ ๊ฒ์ฒ๋ผ ํจ์๊ฐ ์คํ๋๋ ๋ถ๋ถ์ ์ฐพ์ผ๋ฉด this์ ๊ฐ์ ํ๋ณ ๊ฐ๋ฅํ๋ค!
Dot Notation์ ๊ฐ์ฅ ๊ฐํธํ๊ฒ this์ ๊ฐ์ ํ๋ณ์ด ๊ฐ๋ฅํ๋ค. . ์์ ์๋ ๊ฐ์ฒด๊ฐ this๋ก ์ค์ ์ด ๋๋๋ฐ, ์ฃผ์ํ ์ ์ ๋ค๋ฅธ ์คํ๋ฐฉ์๊ณผ ํผํฉ๋์ด์์๋ ํผ๋์ด ์ฌ ์ ์์ผ๋ ๊ทธ ๋ถ๋ถ์ ์ ์ํด์ผํ๋ค.
//example 1
let age = 100;
let ken = {
age: 35,
foo: function foo() {
console.log(this.age)
}
}
ken.foo();
.
์์ ์๋ ๊ฐ์ฒด๊ฐ this๋ก ์ค์ ์ด ๋๋ค. ๋ฐ๋ผ์ ken์ด๋ผ๋ ๊ฐ์ฒด๊ฐ this์ ๊ฐ์ผ๋ก ์ค์ ์ด ๋๋ค.
//example 2
function foo(){
console.log(this.age);
}
let age = 100;
let ken = {
age: 35,
foo: foo
};
let wan = {
age: 31,
foo: foo
}
ken.foo();
wan.foo();
๋ง์ฐฌ๊ฐ์ง๋ก .์์์๋ ken๊ณผ wan ๊ฐ์ฒด์ age๊ฐ ์ถ๋ ฅ๋๋ค.
// example 3
let age = 100;
let ken = {
age: 35,
foo: function bar() {
console.log(this.age);
}
};
let wan = {
age: 31,
foo: ken.foo
}
var foo = ken.foo; // bar() ๋ผ๋ ํจ์ ์์ฒด๋ฅผ foo์ ๋ฃ์ด๋ ๊ฒ
ken.foo(); // 35
wan.foo(); // 31
foo(); // 100 -> ์ผ๋ฐํจ์ ์คํ๋ฐฉ์
ken
์ ๊ฒฝ์ฐ .
์ผ๋ก ์ ๊ทผํ ๊ฐ์ฒด์ 35
wan
์ ๊ฒฝ์ฐ foo
๊ฐ ken.foo
ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ์ 31
var foo
์ ๊ฒฝ์ฐ ken.foo
ํจ์๋ฅผ ๋ปํ๊ธฐ์ ์ผ๋ฐํจ์ ์คํ๋ฐฉ์ ์ด๋ฏ๋ก ์ ์ญ์ 100
// example 4
let score = 4;
let SSG = {
score: 5,
foo: function bar() {
console.log(this.score);
}
};
let Doosan = {
score: 3,
foo: SSG.foo
}
var foo = SSG.foo;
SSG.foo(); // 5
Doosan.foo(); // 3
foo(); // 4
Dot Notaion ์ ๋ฆฌ
.
์์ ์๋ ๊ฐ์ฒด๊ฐ this๋ก ์ค์ ์ด ๋๋ค.
this์ ๊ฐ์ ํ๋ณํ๋๊ฒ์ ํจ์๊ฐ ์ด๋ป๊ฒ ์คํ๋๋๋์ ๋ฐ๋ผ ๊ตฌ๋ถ๋๋๋ฐ, ๊ทธ ์ธ๋ฒ์งธ ๋ฐฉ์์ผ๋ก ๋ฉ์๋๋ฅผ ํตํด ๋ช ์์ ์ผ๋ก this๊ฐ ๋ฌด์์ ๋ํ๋ด๋์ง ๋ฐ์ธ๋ฉ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
( function.prototype.call / function.prototype.bind / function.prototype.apply )
์ด๊ฒ๋ค์ ํจ์๊ฐ ๊ฐ๊ณ ์๋ ๋ฉ์๋๋ค์ธ๋ฐ, ์ด ๋ฉ์๋๋ค์ ์ฌ์ฉํ์ ๋๋ this์ ๊ฐ์ด ๋ณํ๊ฒ ๋๋ค.
1. call()
// call() example 1
let age = 100;
function foo(){
console.log(this.age);
}
let wan = {
age: 31;
};
foo(); // ์ผ๋ฐํจ์ ์คํ๋ฐฉ์
foo.call(wan); // 31
๋ง์ง๋ง์ค์ ๋ณด๋ฉด foo ๋ผ๋ ํจ์๊ฐ ์คํ ๋๋๋ฐ, call(wan)
์์ wan๊ฐ์ฒด๊ฐ foo๋ผ๋ ํจ์์ this๋ก ์ค์ ๋์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค.
2. apply()
// apply() example 1
let age = 100;
function foo(){
console.log(this.age);
}
let ken = {
age: 35;
};
foo();
foo.apply(ken); // 35
๋ง์ง๋ง์ค์ ๋ณด๋ฉด foo ๋ผ๋ ํจ์๊ฐ ์คํ ๋๋๋ฐ, apply(ken) ์์ ken๊ฐ์ฒด๊ฐ foo๋ผ๋ ํจ์์ this๋ก ์ค์ ๋์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์ ๋ฆฌํ๋ฉด, call๊ณผ apply ์ ๊ฒฝ์ฐ ์ผ๋ฐํจ์ ์คํ๋ฐฉ์์ด๋, dot notation์ ์ฌ์ฉํ์ ๋์๋ ๋ค๋ฅด๊ฒ, ์ฐ๋ฆฌ๊ฐ ์ง์ ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ง์ ํด์ this์ ํ ๋นํ ์ ์๋ค.
ํ์ง๋ง ์ฐจ์ด์ ์ด ์๋ค.
//example 3
let age = 100;
function foo (a,b,c,d,e) {
console.log(this.age);
console.log(arguments);
}
let ken = {
age: 35;
}
foo.call(ken,1,2,3,4,5); // 35 1 2 3 4 5
foo.apply(ken,[1,2,3,4,5]); // 35 1 2 3 4 5
์์์๋ ์ธ์๋ฅผ ํ๋๋ง ๋ฐ์์๋๋ฐ, ์ธ์๋ฅผ ์ฌ๋ฌ๊ฐ ๋ฐ๋๊ฒฝ์ฐ ํ์ฉ ๋ฐฉ์์ด ๋ฐ๋๊ฒ ๋๋ค.
foo.call()
์ ๊ฒฝ์ฐ ์ฒซ๋ฒ์งธ ์ธ์๊ฐ ๊ฐ์ฒด๋ก ์ธ์ ์ด ๋๊ณ , ๋๋ฒ์งธ๋ถํฐ ๋๋จธ์ง ์ธ์๋ค์ foo๋ผ๋ ํจ์์ ์ธ์๋ค๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ค. a = 1 b = 2 c = 3 d = 4 e = 5 ๊ฐ ๋๋ค.
foo.apply ์ ๊ฒฝ์ฐ ์ฒซ๋ฒ์งธ ์ธ์๊ฐ ๊ฐ์ฒด๋ก ์ธ์ ์ด ๋๊ณ , ๋๋ฒ์งธ ์ธ์๊ฐ ๋ฐฐ์ดํํ๋ก ๊ฒฐ์ ํด์ ๋ฐฐ์ด์ ์์๋ค์ด ๊ฐ๊ฐ์ argument
๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์ ๋ฆฌํ๋ฉด, call์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋ ์ธ์์ ์๊ฐ ์ ํด์ ธ ์์ง ์๋ค. ๊ทธ๋ฐ๋ฐ, apply๋ ์ธ์๋ฅผ 2๊ฐ๋ง ๋ฐ๋๋ค. ์ฒซ๋ฒ์งธ ์ธ์๊ฐ this๊ฐ์ผ๋ก ์ค์ ํ๊ณ ์ถ์ ๊ฐ์ฒด๋ฅผ ๋ฃ์ด์ฃผ๊ณ , ๋๋ฒ์งธ ์ธ์๋ ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๊ณ , ๋ฐฐ์ด์ ์์๋ค์ด ์๊ท๋จผํธ๋ก ๋ค์ด๊ฐ๋ค.
3. bind()
apply์ call ๋ฉ์๋๋ค์ ๊ฐ์ฒด์ ์์๋ฅผ ์ค์ ํ ๋ค ํจ์๋ฅผ ์คํ ์์ผฐ๋ค.
๋ฐ์ธ๋๋ call/apply ์ ๋ค๋ฅด๊ฒ ๋ฐ๋ก ํด๋นํจ์๋ฅผ ์คํ์ํค์ง ์๋๋ค. ๋์ ๊ฐ์ฒด๋ฅผ bindํ ํจ์๋ฅผ ๋ฐํํด์ค๋ค. ํต์ฌ์ ๊ฐ์ฒด๋ฅผ ์ค์ ํ๊ณ , ์ค์ ๋ ํจ์๋ฅผ ๋ฐํํ๋ ๊ฒ
// example 4
let age = 100;
function foo(){
console.log(this.age);
}
let ken = {
age: 34
}
let bar = foo.bind(ken); // bar์ ๋ฐํํ๋ค.
bar();
foo.bind(ken) ์ ๋ณด๋ฉด, ken์ this๊ฐ์ผ๋ก ์ค์ ์ ํ๋๊ฒ์ ๋ง์ง๋ง, ์คํ์ํค์ง๋ ์๊ณ ๋ฐํ์ ํ๋ค.
// example 5
let age = 100;
function foo() {
console.log(this.age);
console.log(arguments);
}
let ken = {
age:34
};
let bar = foo.bind(ken);
bar(1,2,3,4,5); // ์ด์ ์์ผ ์คํ์ด ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ken๊ฐ์ฒด๋ฅผ this๊ฐ์ผ๋ก ์ค์ ํด ์ค ๋ค, bar์ ์์๋ฅผ ์ฝ์ ํด์ฃผ๋ฉด ๋๋ค.
๋ฉ์๋call() apply() bind() ๋ฅผ ์ด์ฉํ ์คํ๋ฐฉ์ ์ ๋ฆฌ
- ํ๋์ ์๊ท๋จผํธ๋ฅผ ๋ฐ์ ๋ call( object ) ๋ฉ์๋์ ๊ฒฝ์ฐ, object๊ฐ this๊ฐ์ด ๋์ด ์คํ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ๊ฐ์ ์๊ท๋จผํธ๋ฅผ ๋ฐ์ ์ ์์ผ๋ฉฐ, ๊ทธ ๊ฒฝ์ฐ ์ฒซ๋ฒ์งธ ์๊ท๋จผํธ๋ ๊ฐ์ฒด๊ฐ this๋ก ์ค์ ์ด ๋๋ฉฐ, ๋๋จธ์ง ๊ฐ์ ํจ์์ ์๊ท๋จผํธ๋ก ๋ค์ด๊ฐ๊ฒ ๋์ด ์คํ๋๋ค.
- ํ๋์ ์๊ท๋จผํธ๋ฅผ ๋ฐ์ ๋ apply( object ) ๋ฉ์๋์ ๊ฒฝ์ฐ, object๊ฐ this๊ฐ์ด ๋์ด ์คํ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋จ 2๊ฐ์ ์๊ท๋จผํธ๋ฅผ ๋ฐ์ ์ ์์ผ๋ฉฐ, ์ฒซ๋ฒ์งธ ์๊ท๋จผํธ๋ ๊ฐ์ฒด๊ฐ this๋ก ์ค์ ์ด ๋๋ฉฐ, ๋๋จธ์ง ๊ฐ์ ๋ฐฐ์ด๋ก ๊ฒฐ์ ์ด ๋๋๋ฐ, ๋ฐฐ์ด์ ์์๋ค์ด ํจ์์ ์๊ท๋จผํธ๋ก ๋ค์ด๊ฐ๊ฒ ๋์ด ์คํ๋๋ค.
- ๋ง์ง๋ง์ผ๋ก bind()์ ๊ฒฝ์ฐ object๊ฐ this์ ๊ฐ์ด ๋๋ ๊ฒ์ ๋์ผ ํ๋, ์คํ์ ๋์ง ์๊ณ ๋ฐํ์ ํ๋ค.
this๋ผ๋ ๊ฐ์ ํจ์๋ฅผ ์ด๋ป๊ฒ ์คํ์ํค๋๋์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง๋ค.
function foo(){
console.log(this);
}
new foo(); // ์ด๋ด๋ this์ ๊ฐ์ ๋น ๊ฐ์ฒด๊ฐ ๋ค์ด๊ฐ๋ค.
์ด๋ new๋ฅผ ํ๋ฉด ๋น ๊ฐ์ฒด๊ฐ ์๋ก ์์ฑ๋๋ฉด์ ๋น ๊ฐ์ฒด๊ฐ this์์ ํ ๋น ๋๋ค.
[new โ ์๊ฑฐ] this์ ๋น ๊ฐ์ฒด๊ฐ ์๋ก์ด ํ ๋น๋์ด ์คํ๋๋ค.
function foo(){
this.name = '์๊ธ์ฑ';
}
var jagum = new foo();
console.log(jagum);
function foo(){
// this = {};
this.name = '์๊ธ์ฑ';
//{
// name: '์๊ธ์ฑ'
//}
// return this;
}
var jagum = new foo();
console.log(jagum); //
์ฆ,
foo()์๋ ๋ฆฌํด๊ฐ์ด ์ ํ ์๋๋ฐ, new๋ฅผ ์ฌ์ฉํ๋ฉด return this๊ฐ ๋๋ค. (์์ธ๊ฐ ์์ง๋ง)
new๋ฅผ ์ฌ์ฉํ๋ฉด ๋น ๊ฐ์ฒด๊ฐ ์์ฑ์ด ๋๊ณ , ์ฐ๋ฆฌ๊ฐ return์ ๋ช ์ํ์ง ์๋๋ผ๋ return this๊ฐ ์๋์ผ๋ก ์ค์ ์ด ๋๋ค.
new๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ์คํ์ํค๋ฉด, this={} ๋น ๊ฐ์ฒด๊ฐ ์์ฑ์ด ๋๊ณ ๋ง์ง๋ง์๋ this๊ฐ ๋ฆฌํด์ด ๋๋ค.
// ์ธ์๋ฅผ ๋๊ฒจ์ฃผ๋ ๊ฒฝ์ฐ
function foo(name){
this.name = name;
}
let jagum = new foo('์๊ธ์ฑ');
console.log(jagum);
๊ธฐ๋ณธ์ ์ผ๋ก new๋ฅผ ํ๋ฉด์ ์ธ์๋ฅผ ๋ฃ์ด์ค๋ ์๊ด์๋ค.
// ์์ฑ์ ํจ์
function Person(name, age){
this.name = name;
this.age = age;
}
// ์ธ์คํด์ค
let Hong = new Person('HGD', 20); // ์๋ก์ด ๋น ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด ๊ฐ๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋ค.
let Kim = new Person('KKK', 24);
console.log(Hong);
console.log(Kim);
new๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๋ ํจ์๋ฅผ ์์ฑ์ ํจ์๋ผ๊ณ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์ฑ์ ํจ์๋ ์ฒซ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ํ๊ธฐํด์ค๋ค.
new๋ฅผ ์ด์ฉํ ์คํ๋ฐฉ์ ์ ๋ฆฌ
์ฌ์ค ๊ฐ๊ฐ์ ์ํฉ๋ง ๋ณด๋ฉด ๊ฐ๋จํด ๋ณด์ด์ง๋ง, ์ฝ๋๊ฐ ์ปค์ง๋ฉด ์ปค์ง ์๋ก this๋ฅผ ํ๋ณํ๋ ๊ฒ์ ์ด๋ ต๊ธฐ ๋๋ฌธ์, ์ด 4๊ฐ์ง ์ํฉ์ ์๋ฒฝํ๊ฒ ์์งํ๋ค๋ฉด this๋ฅผ ํ๋ณํ๋ ๊ฒ์ด ์ด๋ ต์ง ์๋ค.
์ผ๋ฐํจ์ ์์์ this
๋ ํธ์ถ๋ ๋ ์ฆ, ๋์ ์ผ๋ก ํ์ฌ ์คํ๋๋ ์ปจํ
์คํธ์ ๋ฐ๋ผ์ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ ์ง ๊ฒฐ์ ๋๋ค. ์ ์ธ๋๋ ์์ ์ด ์๋๋ผ, ํจ์๊ฐ ์คํ๋๋ ์์ ์ ๋ฐ์ธ๋ฉ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ ๊ฒ์ด๋ค!
ํ์ง๋ง ํ์ดํ ํจ์(arrow function)๋ ํจ์๋ฅผ ์ ์ธํ ๋ this์ ๋ฐ์ธ๋ฉํ ๊ฐ์ฒด๊ฐ ์ ์ ์ผ๋ก ๊ฒฐ์ ๋๋ค. ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ ์ผ๋ฐ ํจ์์๋ ๋ฌ๋ฆฌ ํ์ดํ ํจ์์ this ์ธ์ ๋ ์์ ์ค์ฝํ์ this๋ฅผ ๊ฐ๋ฆฌํจ๋ค!
const person = () =>{
this.age = 0;
console.log('age: ', age);
console.log(this)
setTimeout(()=>{
this.age += 1;
console.log('arrow age: ',this.age); // ์์ ์ค์ฝํ์ this๋ฅผ ๊ฐ๋ฆฌํจ๋ค.(์ ์ ์ผ๋ก ๊ฒฐ์ ๋จ)
},1000);
}
person();