f()和(f())之间有什么区别?

时间:2013-06-27 01:02:44

标签: javascript

之间有任何区别
var myfunc = (function () { return function () { ... } }());

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

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

5 个答案:

答案 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)

没有区别,这只是风格问题。两者都是执行函数,它们返回它们在变量中返回的内容,并返回一个函数。 check this out

答案 3 :(得分:0)

没有任何技术差异,它只是一种惯用的风格,用于在开始时发出信号的可读性,它是一种自我调用功能。

答案 4 :(得分:0)

目的是避免全球范围,在var myfunc =前添加(function (){ return function(){}}());基本上会失去目的

比较两个

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

此函数在本地范围内运行,该范围位于括号内。

var myfunc = function(){};

此功能在全局范围内运行。 为什么不这样,因为你可以让自己与其他方法和var以及名为var的插件进行命名冲突,它可以在保存var的情况下阻碍你的应用程序性能全球范围。

我更喜欢

(function() {})();