f()和(f())之间的任何差异

Any difference between f() and (f())?

本文关键字:任何差 之间      更新时间:2023-09-26

之间的任何差异

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

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

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

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

只有当函数关键字是语句中的第一个标记时,外部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强制解析将其视为函数表达式(想想匿名函数),从而允许立即执行。

请参阅:在JavaScript中,函数表达式和声明之间有什么区别?

如果您用其他东西(如变量声明)开始行或语句,那么从技术上讲,这根本不重要。

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

欲了解更多信息,请阅读以下内容:

  • 立即调用函数表达式(IIFE)
  • 命名函数表达式已解密

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

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

目的是避免全局范围,在(function (){ return function(){}}());前面添加var myfunc =本质上会破坏的目的

比较两个

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

此函数在括号内的局部作用域中运行。

var myfunc = function(){};

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

我执行

(function() {})();