0

I have following code

var myObject = {
    foo: "bar",
    func: function() {
        var self = this;
        console.log("outer func:  this.foo = " + this.foo);
        console.log("outer func:  self.foo = " + self.foo);
        (function() {
            console.log("inner func:  this.foo = " + this.foo);
            console.log("inner func:  self.foo = " + self.foo);
        }());
    }
};
myObject.func();

the out put of the following function is

outer func:  this.foo = bar
outer func:  self.foo = bar
inner func:  this.foo = undefined
inner func:  self.foo = bar

I have read in Mozilla MDN that the scope of this is its parent Object . So here this and self will return the variable bar but why the one in the inner function returns undefined

Thanks

Vikram Anand Bhushan
  • 4,836
  • 15
  • 68
  • 130
  • 2
    Because the inner function was called with the default context which is the global one. parent object is the scope when you call the function as a member property, as you did in `myObject.func();` – Arun P Johny Aug 04 '16 at 03:09
  • 1
    Inner function is not inside an object; It's inside another function. So the context is global. – Wickramaranga Aug 04 '16 at 03:10
  • @ArunPJohny so the function which resides inside a property method , will not be able to access the property of the parent Object using `this` ? , In other programming language like `php` say I write if() statement inside a function of a class in a way that is also innerfunction right ? , But I am able to access the `datamembers` using directly `this` . Kind of confusin for me – Vikram Anand Bhushan Aug 04 '16 at 03:24
  • "*the scope of this is its parent Object*" is not true. – Oriol Aug 04 '16 at 03:28

0 Answers0