javascript - 当我仅通过变量调用嵌套函数时,为什么会执行嵌套函数?

标签 javascript

为什么我必须编写一个变量,为其分配一个函数,然后才能正常工作。为什么?

我一直在谷歌上搜索,发现几乎同样的问题在这里 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/

相关文章:

Javascript:为对象添加margin-top,对象与其他对象在对象A内部,页面上有多个对象A

javascript - 如何跨域使用ajax调用asp.net web服务

javascript - npm 错误!不支持的 URL 类型 "workspace:": workspace:*

javascript - 我如何模拟 HTML 密码字段(但会触发 keydown 事件)?

php - 单击 PHP 时显示数组值

javascript - ajax 加载内容中的工具提示

javascript - 如何覆盖 Material-UI Popover Paper 样式?

javascript - Ember.js Action Handlebars {{action}} 不适用于 <option> html 标签

java - 将对象从 servlet 传递到客户端(javascript)

javascript - 为什么变量不累加?