Javascript 为什么要使用(function(){})()或!函数(){}()?
我当时正在读书,突然想到,为什么要用:Javascript 为什么要使用(function(){})()或!函数(){}()?,javascript,closures,anonymous-function,Javascript,Closures,Anonymous Function,我当时正在读书,突然想到,为什么要用: (function(){})(或!function(){}()而不是仅仅function(){}() 有什么具体的原因吗?这取决于你写这篇文章的地方函数(){}()本身将生成一个语法错误,因为它被评估为函数声明,并且这些需要名称 通过使用括号或not运算符,可以强制将其解释为不需要名称的函数表达式 如果它被视为表达式,您可以省略括号或运算符。我想您是在问为什么要使用: var fn = (function(){}()); 与: var fn = func
(function(){})(
或!function(){}()
而不是仅仅function(){}()
有什么具体的原因吗?这取决于你写这篇文章的地方<代码>函数(){}()本身将生成一个语法错误,因为它被评估为函数声明,并且这些需要名称
通过使用括号或not运算符,可以强制将其解释为不需要名称的函数表达式
如果它被视为表达式,您可以省略括号或运算符。我想您是在问为什么要使用:
var fn = (function(){}());
与:
var fn = function(){}();
对我来说,一个简单的答案是,RHS上的函数通常很长,直到我找到底部并看到结尾的()
,我才意识到我一直在读函数表达式,而不是函数赋值
彼得·米肖(Peter Michaux)的答案中有一个完整的解释。罗布的答案稍有不同 许多脚本将整个程序包含在一个函数中,以确保正确的作用域。然后使用末尾的双括号立即运行此函数。但是,这与定义可在页面中使用但最初不运行的函数的程序略有不同 这两种情况之间的唯一区别是最后两个字符(添加双括号)。由于这些程序可能非常长,因此初始括号表示“这将立即运行” 程序是否需要运行?不,这对查看代码并试图理解代码的人有帮助吗?是。可能的副本