为什么我必须编写一个变量,为其分配一个函数,然后才能正常工作。为什么?
我一直在谷歌上搜索,发现几乎同样的问题在这里 Why can't I invoke a function directly? 。但问题是他的代码很复杂,所有人对他的代码的解释都是基于他的代码,而我是初学者,所以我不完全理解他的代码,因此也有解释
我的代码
function foo() {
let a = 10;
let b = 20;
function bar() {
return a + b;
}
return bar;
}
foo();
但是如果将函数分配给变量,它就可以工作。
let x = foo();
x();
最佳答案
这与变量无关。变量只是值的容器。您可以轻松省略变量赋值,而无需更改程序的行为。
所以让我们向后操作并从第二个示例中删除 x
:
// `x` is the same as `foo()`
// `x()` therefor becomes
foo()()
现在您应该看到差异:
foo() // first example
// vs
foo()() // second example
foo
返回一个函数。你必须调用该函数。而且您已经知道函数是通过 ()
调用的。因此 foo()()
调用 foo
,然后调用 foo
的返回值。
这是一个简化的示例:
function foo() {
console.log('inside foo');
function bar() {
console.log('inside bar');
}
return bar;
}
console.log('foo()');
foo();
console.log('foo()()');
foo()();
关于javascript - 当我仅通过变量调用嵌套函数时,为什么会执行嵌套函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53952597/