| Easily. But first, let me fix some errors in your code. You probably meant to write syntactically correct code, so first line changes to following: o={ f: function() { setTimeout(1000,console.log(this)) } }
Then, you probably meant to call console.log after one second, not running it immediately and passing result to timeout argument, and passing 1000 as a callback argument.So the code changes to: o={ f: function() { setTimeout(function() { console.log(this); }, 1000); } }
o.f()
Okay. So what happens now is that- You create and object with property 'f' - You call the function stored within that property - Within Execution Context of that function call, `this` is going to be equal to our object. Note that we have not yet used `this`. - We call setTimeout, passing it function as a callback. - After one second, that function is called, with new Execution Context, not equal to the first one. `this` there is equal to global scope variable. |