我想问一下
之间的主要区别是什么(function(){
....
....
})();
和
function() {
....
....
}();
答案 0 :(得分:1)
第一个是自我调用函数。
(function(){
....
....
})();
该函数将由其自身调用。它主要用于包装内部代码以防止变量污染全局命名空间。您可以在流行的库(如jQuery)中注意到它。
它的另一个用例是:
与其他通常采用块作用域的语言相比,javascript是函数作用域语言。如果要在函数内创建局部变量,也可以将IIFE用于此目的。
第二个实际上是语法错误。但它可能就像
(function(){
....
....
}());
这是表示自我调用功能的另一种方式。
答案 1 :(得分:0)
第一个是immediately invoked function,第二个是无效的JS,因为当解析器遇到function
关键字时,它会将其视为函数声明,而不是函数表达式。
对于立即调用的函数,最好的方法是
(function(){ ... }());
或
(function(){ ... })();
但是您也可以使用一元运算符为函数添加前缀,它将保存一个字节
!function(){ ... }();
~function(){ ... }();
-function(){ ... }();
+function(){ ... }();
答案 2 :(得分:0)
它们不是真正的功能签名,它们是Immediately-invoked function expressions(IIFE),通常这些是两种形式:
(function(){
/* ... */
})();
和
(function(){
/* ... */
}());
括号使函数被视为函数表达式。没有它们,该函数将被视为函数声明