我正在研究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 回答
您遇到的是 calling 和 not calling 函数之间的区别 . 确实在做
在变量
baz
中存储名为bar
的调用 able . 然后做calls/invokes 它 .
实际上,正如斜视所概述的那样,你可以直接调用函数
foo
返回的可调用bar
来做更多细节
考虑您定义的函数
foo
. 因此,foo
也可以被认为/用作可调用的 . 如果我做然后,我可以通过执行调用变量
fou
中包含的函数foo
此后,可调用的
bar
包含在变量baz
中 .