Context basics in JavaScript
Let's say we have some function func
that uses this inside:
function func() {
console.log(this.value);
}
What does this point to in this function?
And we don't know. And JavaScript doesn't know.
And the function itself doesn't know. That is,
at the moment the function is created, what
exactly this points to is not defined.
And it will be determined only when this
function is invoked.
Let us have some kind of input:
<input id="elem" value="text">
Let's bind our function func to this
input so that it executes when the input loses
focus. Now, at the moment the function is
executed, this will point to our input:
let elem = document.querySelector('#elem');
elem.addEventListener('blur', func);
function func() {
console.log(this.value); // will display 'text' on focus loss
}
But after all, we can have not only single input, but several:
<input id="elem1" value="text1">
<input id="elem2" value="text2">
And to each of these inputs we can bind our function
func. In this case, for the first element,
this at the time of the function call will
point to first, and for the second - to second.
In practice, this means that this inside
the function depends on which of the inputs we
lost focus on:
let elem1 = document.querySelector('#elem1');
elem1.addEventListener('blur', func);
let elem2 = document.querySelector('#elem2');
elem2.addEventListener('blur', func);
function func() {
console.log(this.value); // will output either 'text1' or 'text2'
}
In general, this feature this is very
convenient - we create just one function and
bind it to any number of inputs. If this
did not refer to the element in which the event
occurred, then we would not have succeeded - we
would have to create our own function with
the same code for each input!