(函数fn(){...})()不起作用

sta*_*af1 0 javascript

我正在尝试将一些疯狂的回调 - 递归组合合并到我的Node.js应用程序中.经过一些研究,我在同一个块中发现了一个奇怪的语法来声明和执行函数.所以我尝试这个简单的代码来测试这个概念:

(function hello() {
        console.log("Hello, world!");
    })();

hello();
Run Code Online (Sandbox Code Playgroud)

我希望它只是把两个放在Hello, world!控制台中.一个在声明后立即和一个用于hello()通话.然而,它只是打印一个,然后抛出一个错误说hello is not definedhello().

有没有我没有到这里的东西?

Que*_*tin 7

一个命名函数表达式只创建一个具有相同的名称本身就是一个变量它自己的范围.如果需要递归调用它,这很有用.

(function hello() {
    // "hello" exists as a variable only here, inside the function
    console.log("Hello, world!");
})();
Run Code Online (Sandbox Code Playgroud)

您需要一个函数声明来在声明函数的同一范围内创建匹配变量(并且您不能立即调用函数声明).

function hello() {
  console.log("Hello, world!");
}

hello();
hello();
Run Code Online (Sandbox Code Playgroud)