两个功能签名有什么区别?

时间:2015-03-25 14:36:24

标签: javascript

我想问一下

之间的主要区别是什么
(function(){
 ....
 ....
})();

function() {
 ....
 ....
}();

3 个答案:

答案 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(){
/* ... */
}());

括号使函数被视为函数表达式。没有它们,该函数将被视为函数声明