这两个JavaScript函数有何区别?

3

我看到有些人像我一样定义函数:

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

我看到其他人也这样做:

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

在函数周围加上括号有什么区别?它实际上有什么作用吗?

注意:这可能是重复的问题,但由于我没有表达得很好,所以我没有在网上找到答案。


1
你确定你的意思不是 (function stuff() { /这里放代码/ })(); 吗? - Mr Rubix
1
这是我的答案的开头:第一个是函数声明。函数声明在当前作用域中创建一个新绑定,因此您可以通过名称引用该函数。第二个是函数表达式。在“分组运算符”((...))内只能是表达式,因此函数定义被解释为函数表达式。函数名称不会在函数本身之外创建绑定。只能在函数内部使用名称访问该函数。 - Felix Kling
谢谢大家的帮助。 - user5797159
2个回答

3
你想到的是立即调用函数表达式,可以用于产生词法作用域(即私有变量等)。请查看维基百科文章这里。 以下是维基百科中的示例:
var counter = (function(){
 var i = 0;

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

在这种情况下,i 在外部是不可用的。

1
这里你看到任何函数调用吗? - hsz
我不知道,但我猜测OP也不确切知道。 - Luka Jacobowitz

1

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

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

这行代码将定义一个函数并立即执行它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接