这两个函数在Javascript中有什么区别?

时间:2016-03-15 22:15:47

标签: javascript

我见过有些人像我一样定义函数:

function stuff(){ /*code here*/ }

我见过其他人这样做:

(function stuff(){ /*code here*/ })();

括号勾勒出函数的不同之处是什么?它真的有用吗?

注意:这可能是重复的,但我没有在网上找到答案,因为我没有说得很好。

2 个答案:

答案 0 :(得分:4)

您正在考虑的是一个立即调用的函数表达式,可用于生成词法作用域(即私有变量等)。查看Wiki文章here.

以下是维基的一个例子:

var counter = (function(){
 var i = 0;

 return {
   get: function(){
     return i;
   },
   set: function( val ){
     i = val;
   },
   increment: function() {
     return ++i;
   }
 };
})();

在这种情况下,外部无法使用i

答案 1 :(得分:2)

您可能已经看到其他人这样做了:

(function stuff(){ /*code here*/ })();

该行将定义一个函数并立即执行它。