self = this;
We know this refers to the invocation context, but why we need to assign its value to a variable. The reason is this keyword does not have a scope, and nested functions do not inherit the this value of their caller. Thus if a nested function is invoked as a function, its this keyword actually refers to global object (non-strict mode) or undefined (strict mode). In order to access the invocation context of the outer function, we need to assign the value of this keyword to a variable. Recalling from our previous blog Variable Scope & Function Scope, we have variables are visible within the function in which they are defined and within any functions that are nested within that function. Now let's take a look at the following code snippet.
var o = { m: function(){ var self = this; console.log(this===o); // return true f(); //invoking nested function as a function //nested function function f(){ console.log(this===o); // return false console.log(self===o); // return true } } } o.m();
No comments:
Post a Comment