之间有任何区别
var myfunc = (function () { return function () { ... } }());
和
var myfunc = function () { return function () { ... } }();
这只是一种风格问题还是第一种形式的周围()更多?
答案 0 :(得分:6)
不。或者至少不在你的例子中。
外部parens仅在函数关键字是语句中的第一个标记时才起作用。
// 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
略有不同。领先的paren强制解析器将其视为函数表达式(想想匿名函数),这样就可以立即执行。
请参阅:What is the difference between a function expression vs declaration in JavaScript?
如果您使用其他内容(如变量声明)启动行或语句,则技术上根本不重要。
答案 1 :(得分:1)
尽管Crockford建议使用前者,但没有区别,以确定它被视为函数表达式。
有关详细信息,请阅读以下内容:
答案 2 :(得分:0)
答案 3 :(得分:0)
没有任何技术差异,它只是一种惯用的风格,用于在开始时发出信号的可读性,它是一种自我调用功能。
答案 4 :(得分:0)
目的是避免全球范围,在var myfunc =
前添加(function (){ return function(){}}());
基本上会失去目的
比较两个
(function(){...do something...}());
此函数在本地范围内运行,该范围位于括号内。
var myfunc = function(){};
此功能在全局范围内运行。
为什么不这样,因为你可以让自己与其他方法和var
以及名为var
的插件进行命名冲突,它可以在保存var
的情况下阻碍你的应用程序性能全球范围。
我更喜欢
(function() {})();