2017-06-15 83 views
0

我正在学习Javascript,并且有此问题。下面是一些示例代码:JavaScript:访问嵌套函数中的中/外函数的变量/属性

var xq = false; 
 
var fooyy = function ttt() { 
 
    var xq = false; 
 
    baryy = function() { 
 
    var xq = true; 
 
    console.log(xq); 
 
    console.log(ttt); 
 
    console.log(fooyy); 
 
    console.log(ttt.xq); 
 
    console.log(fooyy.xq); 
 
    console.log(window.xq); 
 
    }(); 
 
}; 
 

 
fooyy(); 
 
console.log(xq); 
 
console.log(fooyy.xq);

望着输出,我的问题是,这样岂不是从内部嵌套功能,外部功能性和变量不能被访问(无论是同名还是其他)?或者如果他们可以,你能解释如何和为什么? (我看到本地和全局变量都可以访问)谢谢!

+3

请参阅[闭包](https://developer.mozilla.org/en/docs/Web/JavaScript/Closures) – James

回答

1

是否意味着从内部嵌套函数中,不能访问外部函数的属性和变量?

不。那些不是属性,它们是变量。您试图将它们作为不存在的函数的属性进行访问。

我看到局部和全局变量都可以访问。关于外部函数的变量(在具有相同名称和其他情况下)呢?

只要它们具有不同的名称,就可以访问它们。这被称为lexical scope,并且即使在外部函数已经返回之后也可以工作 - 内部函数将形成closure。你可以通过他们的名字简单地访问它们,它们是局部变量。

如果然而具有相同名称的本地作用域的变量,就像在你的榜样变量xq,该局部变量将阴影从外部范围的变量,并使其无法访问。如果你想访问它,你需要重命名任何变量。

0

你在那里有一个closure,很好地在这SO question解释。

此外,请看这个SO question,在那里人们投入了大量的努力来解释什么是闭包。

总之,baryy函数可以访问外部变量。