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 ๋ฐ์ธ๋ฉ ํ๊ธฐ
- ์ค์ฝํ ๋ด์์ ๋ณ์๋ฅผ ์ด์ฉํ ์ฐํ๋ฒ
- call ,bind ,apply
var obj = {
method : functoin(){
console.log(this) // { method: f }
var innerFoo = function () {
console.log(self) // {method: f } // ํจ์์ this๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฉ
}.bind(this)
innerFoo();
}
}
'๐ JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
"ํด๋ก์ ๊ฐ ๋ญ์์?" ๋ฅผ ๋ตํ์ง ๋ชปํ๋ค. (0) | 2022.06.23 |
---|---|
JavaScript replace์ ๋ณ์ ํ์ฉํ๊ธฐ - ์ ๊ทํํ์ (regExp) ์ด์ฉ (0) | 2022.05.17 |
[JS Tam9์ํ] #9 ์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ ์ปจํ ์คํธ (0) | 2021.08.25 |
[JS Tam9์ํ] #8 ์๋ฐ์คํฌ๋ฆฝํธ์ this ๋? (0) | 2021.08.11 |
[JS Tam9์ํ] #7 ๋นํธ์ธ ๊ฐ์ฒด (0) | 2021.08.09 |
๋๊ธ