Inner function cannot access outer functions variable

后端 未结 5 624
攒了一身酷
攒了一身酷 2021-01-13 10:14

I have created the following jsfiddle which highlights my problem. http://jsfiddle.net/UTG7U/

var ExampleObject = function() {
   var myArray = new Array();         


        
相关标签:
5条回答
  • 2021-01-13 10:39

    You have confused two types of variables: Local variables and member variables. var myArray is a local variable. this.myArray is a member variable.

    Solution using only local variables:

    var ExampleObject = function() {
       var myArray = new Array(); // create a local variable
       this.example = function() {
           alert(myArray); // access it as a local variable
       };
    }
    
    var exampleObj = new ExampleObject();
    exampleObj.example();​
    

    Solution using only member variables:

    var ExampleObject = function() {
       this.myArray = new Array(); // create a member variable
       this.example = function() {
           alert(this.myArray); // access it as a member variable
       };
    }
    
    var exampleObj = new ExampleObject();
    exampleObj.example();​
    
    0 讨论(0)
  • 2021-01-13 10:44

    You don't need the this.myArray. Using myArray alone will suffice (and work).

    0 讨论(0)
  • 2021-01-13 10:50

    alert(myArray); should work fine I think

    0 讨论(0)
  • 2021-01-13 10:53

    you were trying to access a local variable using this operator which is wrong, so here is the working example

    var ExampleObject = function() {
       var myArray = new Array(1,2,3);
       this.example = function() {
           alert(myArray);
       };
    }
    var exampleObj = new ExampleObject();
    exampleObj.example();​
    

    Link: http://jsfiddle.net/3QN37/

    0 讨论(0)
  • 2021-01-13 10:53

    What this is changes with the scope of each function. However, myArray will be visible to inner function. Example:

    var ExampleObject = function() {
       var myArray = new Array();
       this.example = function() {
           alert(myArray);
       };
    }
    var exampleObj = new ExampleObject();
    exampleObj.example();​
    
    0 讨论(0)
提交回复
热议问题