首页 文章

几乎相同的代码 . 但是另一个在返回子函数时不会产生输出

提问于
浏览
0

我正在研究Javascript中的闭包,我看到这个代码示例用于闭包,输出为整数“2”

function foo() {
    var a = 2;

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

var baz = foo();
baz();

我尝试修改它,看看我是否可以通过删除函数foo()的var baz看到相同的结果;传递,以减少代码因为我认为它具有相同的逻辑 . 但在更改后,它不会给我任何输出 . 这是代码

function foo() {
    var a = 2;

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

foo();

我期待看到相同的结果 . 因为var baz引用了foo()函数,所以为什么不删除var baz并只执行foo();功能 . 但我根本没有提供任何输出 . 谁能告诉我这里发生了什么?

1 回答

  • 2

    您遇到的是 callingnot calling 函数之间的区别 . 确实在做

    var baz = foo();
    

    在变量 baz 中存储名为 bar 的调用 able . 然后做

    baz()
    

    calls/invokes 它 .

    实际上,正如斜视所概述的那样,你可以直接调用函数 foo 返回的可调用 bar 来做

    foo()()
    

    更多细节

    考虑您定义的函数 foo . 因此, foo 也可以被认为/用作可调用的 . 如果我做

    var fou = foo;
    

    然后,我可以通过执行调用变量 fou 中包含的函数 foo

    var baz = fou();
    

    此后,可调用的 bar 包含在变量 baz 中 .

相关问题