繁体   English   中英

如何从内部函数访问外部作用域?

[英]How to access outer scope from inner function?

如何从内部函数c1访问container.a?

var container = {
    a : 'blah',
    b : function(){
        console.log(this.a); // prints 'blah'
    },
    c : {        
        // how to access container.a from here?
        c1: function(){
            // and here?
        }
    }
}

只要参考容器就可以了

var container = {
    a : 'blah',
    b : function(){
        console.log(this.a); // prints 'blah'
    },
    c : {        
        c1: function(){
            console.log(container.a)
        }
    }
}

按名字:

var container = {
  a : 'blah',
  b : function(){
    console.log(this.a); // prints 'blah'
  },
  c : {        
    // how to access container.a from here?
    c1: function(){
      console.log(container.a);
        // and here?
    }
  }  
}

可以参考保存对象的引用外部变量,但不一定稳定。 如果更改“容器”的值,它将不起作用。 为了防止这种情况,您可以将对象定义封装在匿名函数中:

var container = function() {
  var obj = {
    a : 'blah',
    b : function(){
      console.log(this.a); // prints 'blah'
    },
    c : {        
      c1: function(){
        console.log(obj.a)
      }
    }
  };

  return obj;
}();

看起来非常相似,但通过这样做,你可以保证“obj”的值不会改变(除非对象中的某些其他函数改变它,这将是一件奇怪的事情)。 现在,无论最初分配给“容器”的对象发生什么,该.c.c1()函数都将继续工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM