区分闭包和局部变量

loc*_*ope 6 javascript closures scope

闭包中的局部函数声明一个具有相同名称的变量,该变量存在于闭包中.那么,我们怎么能从本地函数访问closure的变量呢?

function closure()
{
    var xVar; 
    function func1()
    {
        var xVar;
        // how to distinguish local and closure scopes.
        return xVar;
    }
    return function () { return func1(); };
}
Run Code Online (Sandbox Code Playgroud)

创建私有对象并将私有变量作为此对象的属性可能会有所帮助.但我想知道是否有更好,更整洁的解决方案.范围链可以帮助吗?

我已编辑完全关闭.无论如何,闭包在这里并没有太多关注,它可以考虑内部函数,但是,可能有某种方式闭包的解决方案.

谢谢

Ben*_*tto 3

您无法在 JS 中显式访问作用域链。你的问题是变量阴影的古老问题,但它更令人抓狂,因为在 JS 中,作用域链实际上在运行时就存在,只是你无法访问它。

如果您使用讨厌的with运算符,您可以通过重新调整当前作用域来玩一些技巧,但是(以及 的arguments调用者/被调用者的东西)实际上只是让您可以访问对象和函数及其属性。没有办法说“从这里告诉我 xVar 在 n-1 运行时范围中的含义”。