[英]Why Closure property of javascript does not work with parent object
根据javascript中闭包的定义:闭包是一个内部函数,可以访问外部(封装)函数的变量-作用域链。
由于一切都是JavaScript甚至函数中的对象。 我的问题是绑定时,对象(如foo)中的函数(如bar)不能直接访问对象的属性。 例如:
var foo= {
tmp: 3,
x:2,
bar: function(y) {
console.log(x + y + (++tmp));
}
}
执行时
foo.bar(10)
它给出了无法识别x&tmp的错误。
但是现在当上面的代码以这种方式编写时
function foo(x) {
tmp: 3,
bar: function(y) {
console.log(x + y + (++tmp));
}
bar(10);
}
然后执行
foo(2);
它不会抱怨并给出输出16
我可以理解,在第二种情况下,它能够访问父函数的变量,因为JavaScript具有此属性(我们称其为Closure属性)。
但是在第一种情况下,当外部实际上是一个对象时,内部函数就无法访问父对象的变量(因为它可以访问外部函数的变量)。
尽管我知道解决方法是使用此关键字访问外部对象变量。 但是问题仍然存在。
它不违反第一种情况下的关闭属性吗?
是,因为错误显示消息x未定义,因为
var foo= {
tmp: 3,
x:2,
bar: function(y) {
console.log(x + y + (++tmp));
}
}
由于tmp
和x
是foo的对象,而不是bar的局部变量。而foo是bar的父级,它可以使用this
运算符进行访问,您可以在下面的示例中看到它。
var foo= {
tmp: 3,
x:2,
bar: function(y) {
console.log(this.x + y + (++this.tmp));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.