6

之间的任何区别

var myfunc = (function () { return function () { ... } }());

var myfunc = function () { return function () { ... } }();

这只是风格问题还是第一种形式的 () 周围有更多?

4

5 回答 5

6

没有。或者至少在你的例子中不是。

仅当函数关键字是语句中的第一个标记时,外部括号才有意义。

// cool
var foo = function(){}();
var foo = (function(){}());

// also cool
(function(){}());

// not cool, syntax error
// parsed as function statement, expects function name which is missing
function(){}();

// also not cool, syntax error
// declares a function, but can't be executed immediately
function foo(){}();

function是语句中的第一个标记时,它是一个函数声明(想想命名函数),它的行为与所有其他上下文略有不同function。该领先的括号强制解析将其视为函数表达式(想想匿名函数),从而允许立即执行。

请参阅:JavaScript 中的函数表达式与声明有什么区别?

如果您以其他内容(例如变量声明)开始该行或语句,则从技术上讲根本无关紧要。

于 2013-06-27T01:05:35.813 回答
1

没有区别,尽管 Crockford 建议使用前者来确定它被视为函数表达式。

有关更多信息,请阅读以下内容:

于 2013-06-27T01:04:29.977 回答
0

没有区别,只是风格问题。两者都是执行函数,它们返回变量中返回的任何内容,并且返回一个函数。看一下这个

于 2013-06-27T01:04:38.307 回答
0

没有技术上的区别,它只是一种用于提高可读性的惯用风格,一开始就表明它是一个自调用函数。

于 2013-06-27T01:05:43.630 回答
0

目的是为了避免全局作用域,var myfunc =在前面添加(function (){ return function(){}}());基本上就达不到目的了

比较两者

(function(){...do something...}());

此函数在括号内的局部范围内运行。

var myfunc = function(){};

此函数在全局范围内运行。为什么不这样,因为您可能会与其他方法var以及插件的命名发生命名冲突,并且由于保存在全局范围内var,它可能会阻碍您的应用程序性能。var

我更喜欢

(function() {})();
于 2013-06-27T01:06:00.730 回答