和IIFE之间有什么区别
(function foo () {
var var_of_concern;
}());
和普通功能
function foo () {
var var_of_concern;
}
foo();
关注我的警告是,如果我从IIFE或功能中没有通过任何内容,那么IIFE会让内存保持更长时间吗?
答案 0 :(得分:6)
相反,虽然这可能不是一个严重的问题。
这两者在语法上是不一样的。第二个声明一个函数并将其绑定到本地符号“foo”。函数调用后该函数将保留。
IIFE形式在语法上是单一表达式。第二种形式涉及两个语句,一个函数声明语句和一个表达式语句(函数调用)。
函数调用处理局部变量声明的方式 nothing 与函数对象的生成方式有关。如果您的示例中的两个函数都相同,那么在函数调用中为局部变量分配该空间的方式没有区别。
编辑 - 键语法的区别在于:新语句的 start 处的关键字function
引入了一个函数声明。该语法形式不提供立即调用。就是这样:
function hello() {
// some code
}(); // <---- ERROR
是语法错误。
当function
关键字出现在任何其他上下文(以及任何有效的上下文)中时,它是不是一个函数声明 - 它是一个函数实例化(或函数定义;我是必须检查spec)表达式。这些都是JavaScript中表达式的一部分:
5
"hello"
false
(2 + 5)
(function() { alert("Hi!"); })
请注意,最后一个示例涉及括号 - 通常用于“消除”“看看函数声明!”解析器的行为。该左括号表示function
关键字不出现在语句的绝对开头,因此它只是一个函数实例化表达式。