Javascript 命名IIFE和立即调用name函数之间的区别?

Javascript 命名IIFE和立即调用name函数之间的区别?,javascript,Javascript,和生活有什么区别吗 (function foo () { var var_of_concern; }()); 和一个普通函数 function foo () { var var_of_concern; } foo(); 让我担心的是,如果我没有从生命或函数中传递任何东西,生命会让内存活得更长吗?相反,尽管这可能不是一个严重的问题 这两者在语法上是不一样的。第二个声明函数并将其绑定到本地符号“foo”。该函数将在函数调用后保留 生命形式在句法上是一种单一的表达状态。第二种形式包括

和生活有什么区别吗

(function foo () {
    var var_of_concern;
}());
和一个普通函数

function foo () {
   var var_of_concern;
}
foo();

让我担心的是,如果我没有从生命或函数中传递任何东西,生命会让内存活得更长吗?

相反,尽管这可能不是一个严重的问题

这两者在语法上是不一样的。第二个声明函数并将其绑定到本地符号“foo”。该函数将在函数调用后保留

生命形式在句法上是一种单一的表达状态。第二种形式包括两条语句,一条函数声明语句和一条表达式语句(函数调用)

函数调用处理局部变量声明的方式与函数对象的生成方式无关。如果示例中的两个函数相同,那么在函数调用中为局部变量分配空间的方式没有区别

编辑-关键的语法的区别在于:新语句的开始处的关键字
function
引入函数声明语句。这种语法形式不提供即时调用。就是这个,

function hello() {
  // some code
}();  // <---- ERROR

请注意,最后一个示例涉及括号-这通常用于“消除”解析器的“Oh look a function declaration!”行为。开括号意味着
函数
关键字不会出现在语句的绝对开头,因此它只是一个函数实例化表达式。

@livingston\u。它仍然只能从函数内部访问(因为在这两种情况下它都是用
var
声明的),这两种情况下内部变量的处理方式完全相同。如果函数不返回(或允许“转义”)函数,那么在函数退出后,激活记录将被取消引用并进行垃圾收集……如果IIFE被命名为foo,那么它们在语法上是否相同?对不起,在我得到这些信息之前,我无法提出更精确的问题……这是最后一次澄清/编辑……对不起。@livingston\u不,它们仍然不一样。在函数实例化表达式中为函数使用名称是可以的,但它仍然是一个表达式,而不是函数声明语句。我要补充一点来澄清。@Pointy我想说这是类似的:
var a=function foo(){}-
foo
不是一个从那时起就可以引用的函数…您可以通过
a
引用它。
 5
 "hello"
 false
 (2 + 5)
 (function() { alert("Hi!"); })