(函数fn(){...})()无效

时间:2016-12-27 15:08:15

标签: javascript

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



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

hello();




我希望它只是在控制台中放置两个Hello, world!。声明后立即发出一个hello()电话。但是,它只打印一个,然后在hello is not defined处抛出错误hello()

我有没有来这里的东西?

1 个答案:

答案 0 :(得分:7)

命名函数表达式仅创建一个与其自身范围内的 同名的变量。如果需要递归调用它,这很有用。

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

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

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

hello();
hello();