我正在研究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();功能。但我根本没有提供任何输出。谁能告诉我这里发生了什么?
答案 0 :(得分:2)
您遇到的是呼叫和不呼叫功能之间的区别。确实在做
var baz = foo();
将名为bar
的来电能存储在变量baz
中。然后做
baz()
调用/调用。
实际上,正如斜视所概述的那样,你可以通过
直接调用函数bar
返回的可调用 foo
。
foo()()
考虑您定义的函数foo
。因此,foo
也可以被视为/可用作可调用的。如果我做
var fou = foo;
然后我可以通过执行
调用变量foo
中包含的函数fou
var baz = fou();
此后,可调用bar
包含在变量baz
中。