Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么要使用(function(){})()或!函数(){}()?_Javascript_Closures_Anonymous Function - Fatal编程技术网

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)的答案中有一个完整的解释。

罗布的答案稍有不同

许多脚本将整个程序包含在一个函数中,以确保正确的作用域。然后使用末尾的双括号立即运行此函数。但是,这与定义可在页面中使用但最初不运行的函数的程序略有不同

这两种情况之间的唯一区别是最后两个字符(添加双括号)。由于这些程序可能非常长,因此初始括号表示“这将立即运行”

程序是否需要运行?不,这对查看代码并试图理解代码的人有帮助吗?是。

可能的副本