Chapter 2. this All Makes Sense Now!
In Chapter 1, we discarded various misconceptions about this
and
learned instead that this
is a binding made for each function
invocation, based entirely on its call-site (how the function is
called).
Call-Site
To understand this
binding, we have to understand the call-site: the
location in code where a function is called (not where itâs declared).
We must inspect the call-site to answer the question: what is this
this
a reference to?
Finding the call-site is generally âgo locate where a function is called from,â but itâs not always that easy, as certain coding patterns can obscure the true call-site.
Whatâs important is to think about the call-stack (the stack of functions that have been called to get us to the current moment in execution). The call-site we care about is in the invocation before the currently executing function.
Letâs demonstrate the call-stack and call-site:
function
baz
()
{
// call-stack is: `baz`
// so, our call-site is in the global scope
console
.
log
(
"baz"
);
bar
();
// <-- call-site for `bar`
}
function
bar
()
{
// call-stack is: `baz` -> `bar`
// so, our call-site is in `baz`
console
.
log
(
"bar"
);
foo
();
// <-- call-site for `foo`
}
function
foo
()
{
// call-stack is: `baz` -> `bar` -> `foo`
// so, our call-site is in `bar`
console
.
log
(
"foo"
);
}
baz
();
// <-- call-site for `baz`
Take care when analyzing code to find the actual call-site (from the
call-stack), because itâs the only thing that matters for this ...
Get You Don't Know JS: this & Object Prototypes now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.