티스토리 뷰
자바스크립트의 this
자바스크립트의 this 는 상황에 따라 달라집니다.
자바스크립트의 일반적인 this 는 전역 객체를 바라봅니다.
또한 use strict 모드에서는 this 는 undefined 입니다.
// 일반함수 (전역객체)
function normal() {
console.log(this); // Window
// 내부함수 (전역객체) 함수의 함수를 선언해도 this 는 Window 로 같습니다.
function inside() {
console.log(this); // Window
}
inside();
}
normal();
// 콜백함수 (전역객체)
// 화살표 함수 (전역객체)
const cb = {
callback: function() {
setTimeout(function() {
console.log(this); // window
}, 50);
},
arrow: () => console.log(this) // window
}
cb.callback();
객체의 함수로 정의할 시, this 는 해당 객체를 바라봅니다.
// obj 객체의 apple 이라는 함수 선언
const obj = {
apple: function () {
// this 는 해당 객체의 this를 바라봅니다.
console.log(this); // apple
}
}
obj.apple();
하지만, obj.apple 을 다른 외부 객체에서 재정의해서 사용 시에는 this는 window 를 바라봅니다.
const banana = obj.apple;
banana(); // window
call
call 은 this를 다른 함수로 바인딩하면서 함수를 호출한다.
첫 번째 인자는 함수 호출에 제공되는 this 이고 두 번째 인자는 호출하는 함수의 인자들이 들어갑니다.
apply
apply는 call과 마찬가지로 this를 다른 함수로 바인딩하면서 함수를 호출합니다.
첫번째 인자는 함수 호출에 제공되는 this 이고 두번째 인자는 호출하는 함수의 인자들이 배열로 들어갑니다.
const func = function (a, b) {
console.log (this, a, b);
}
func(1, 1); // window, 1, 1
func.call("call", 1, 1); // "call", 1, 1
func.apply("apply", [1, 1]); // "apply", 1, 1
bind
bind는 모든 함수에서 사용할 수 있다.
bind를 사용하게 되면 this를 직접 정해서 고정시킬 수 있다.
첫번째 인자는 함수 호출에 제공될 this 임으로, 객체 형식으로 넘겨주고 두번째 인자는 호출하는 함수의 인자들이 들어갑니다.
const sum = function (a, b) {
console.log(this.title + "= " + a + b);
}
this.title = "window";
sum(1, 2); // window= 12
sum.bind({title: "bind"}, 1, 2)(); // bind= 12
'개발.. > Javascript' 카테고리의 다른 글
자바스크립트 이벤트 (0) | 2021.09.09 |
---|---|
이벤트 루프 (0) | 2021.09.07 |
클로저 (0) | 2021.09.06 |
자바스크립트 비동기, 콜백 (0) | 2021.09.01 |
Reflow(리플로우), Repaint(리페인트) (0) | 2021.08.31 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- AWS
- vscode
- NUXT
- React
- openAI
- nuxt2
- Vite
- Git
- vue composition api
- 오블완
- cors
- Storybook
- 서버 to 서버
- webpack
- docker
- 티스토리챌린지
- nextjs14
- 타입스크립트
- Github Actions
- dockerfile
- Embedding
- NextJS
- nodejs
- nextjs13
- 스벨트
- 네이버 서치 어드바이저
- seo
- vue router
- 깃허브
- svelte
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함