There are some questions about the this direction in setTimeout ().
var x = 1;
var o = {
x: 2,
y: function() {
console.log(this.x);
}
};
setTimeout(o.y, 1000);
:1,thiswindow
var x = 1;
var o = {
x: 2,
y: function() {
console.log(this.x);
}
};
setTimeout(o.y(), 1000);
the result of execution is: 2
this is pointed to o .
Why does adding () change the direction of this?
indicates the call in parentheses, without parentheses indicates the function body, the first call is window, so the result is 1 and this pointing to window, and the second time, as you typed, the object o is called after parentheses, so of course it points to the object itself, so it is 2. / p >
the previous one is equivalent to
setTimeout(function() {
console.log(this.x);
}, 1000);
setTimeout internal this points to window
the latter is equivalent to
o.y()
setTimeout(undefined, 1000);
o
the yjournal this executed points to o .
o.y
passes a function, which is the syntax of window.setTimeout (fn,times)
, indicating that fn
is executed after times
milliseconds, obviously by window
.
o.y ()
means to execute the function immediately, which has nothing to do with the timer. At this time, the executor is o
.
o.y
is function
. Execute
o.y ()
immediately after 1s. The result is 2
.
1 is a direct call, pointing to the global;
2 is a method call, pointing to the caller of the method.
For more information, please see
link .