双重嵌套函数值返回进入双重嵌套函数停止(Double nesting a function-valu

2019-10-19 02:45发布

试图了解从作用域链执行上下文堆栈文章大卫·谢里夫的博客 ,我试图了解这里关闭

function foo() {
    var a = 'private variable';
    return function bar() {
        alert(a);
    }
}

var callAlert = foo();
callAlert(); // private variable

我只是想测试是否内功能刚刚从其父或从整个范围链可变对象 ,所以我添加了一个嵌套函数重复例如:

function foo() {
    var a = 'private variable';
    return function bar() {
        return function foobar() {
            console.log(a);
        };
    };
}

var callAlert = foo();
callAlert();  //

那就是不给任何结果。 这似乎解释甚至没有进入foob​​ar的()函数。 而语法比其父相同。

但是,如果我把函数声明和执行它的工作原理。

function foo() {
    var a = 'private variable';
    return function bar() {
        function ra() {
            console.log(a);
        };
        return ra();
    };
}

var callAlert = foo();
callAlert(); // private variable

而且真的我试图猜测为什么; 这里是从栏()的差异,foobar的()函数。

PS -我测试上的jsfiddle

Answer 1:

function foo() {
    var a = 'private variable';
    return function bar() {
        return function foobar() {
            console.log(a);
        };
    };
}

在这里,我们返回,返回功能的功能,所以你需要调用新的,双重嵌套函数

var callAlert = foo()();

DEMO

或者对这个主题的任何变化

var getBar = foo();
var getFooBar = getBar();
getFooBar(); //private variable.

更新演示


第二个例子能正常工作,因为你仍然返回一个功能 -a功能简单的调用另一个函数。

return function bar() {
    function ra() {
        console.log(a);
    };
    return ra();
};


文章来源: Double nesting a function-valued return stops from entering the double nested function