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

我希望它只是在控制台中放置两个Hello, world!
。声明后立即发出一个hello()
电话。但是,它只打印一个,然后在hello is not defined
处抛出错误hello()
。
我有没有来这里的东西?
答案 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();