Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 显示模块模式函数初始化样式_Javascript_Design Patterns - Fatal编程技术网

Javascript 显示模块模式函数初始化样式

Javascript 显示模块模式函数初始化样式,javascript,design-patterns,Javascript,Design Patterns,我想知道,初始化对象时附加括号的意义是什么。例如: var foo = function(){ ... }(); 对 var foo = (function(){ ... }()); 我假设与作用域有关,但我想知道是否有人可以更精确地描述具体的差异,因为他们似乎都是基于每个匿名函数返回的内容初始化对象 据我所知,这只是一个惯例,不是绝对必要的 这是一篇很好的帖子,讲述了为什么这个公约是有用的: 在这种特殊情况下,没有有效的区别 有些人喜欢外部的(…),因为它在=操作符附近提供了一个调用函数的

我想知道,初始化对象时附加括号的意义是什么。例如:

var foo = function(){ ... }();

var foo = (function(){ ... }());

我假设与作用域有关,但我想知道是否有人可以更精确地描述具体的差异,因为他们似乎都是基于每个匿名函数返回的内容初始化对象

据我所知,这只是一个惯例,不是绝对必要的

这是一篇很好的帖子,讲述了为什么这个公约是有用的:


在这种特殊情况下,没有有效的区别

有些人喜欢外部的
(…)
,因为它在
=
操作符附近提供了一个调用函数的视觉提示

但是赋值运算符使
函数
作为赋值运算符右侧操作数的表达式进行求值,因此可以调用它,而无需在函数声明中强制它


在没有赋值的情况下,需要使用一些语法,让解释器知道
function
关键字被用作匿名函数表达式

例如

(function() {
   // code
})();
!function() {
   // code
}();
这里的括号解决了
函数
的歧义,因此它被视为
(…)
组中的单个表达式


分组运算符只是强制将
函数
作为表达式计算的一种方法。大多数JavaScript操作符都可以用于此目的。一元运算符可能是最安全的,例如

(function() {
   // code
})();
!function() {
   // code
}();
……或者

void function() {
   // code
}();

在这两种情况下,
函数
被视为相应运算符的单个操作数。

两者在功能上是等效的

然而,按照惯例,许多程序员更喜欢用左括号表示var是函数的结果,而不是函数本身

自调用函数的用途是传入变量以保留它们的“名称空间”,例如,传入窗口、文档或其他类似jquery的东西是很常见的

根据对jslint的一些快速测试,这样做的首选方法是以下测试中的第一个(foo)

var foo = (function () {}());
var bar = (function () {})();
var baz = function () {}();
请注意,调用()位于外括号内

JSLint给出了bar和baz的以下错误

错误:

第2行第28个字符出现问题:将调用移到paren中 包含函数的

var-bar=(函数(w){})(窗口)

第3行的问题字符27:包装立即函数调用 在括号中,帮助读者理解 表达式是函数的结果,而不是函数本身

var baz=函数(w){}(窗口)


在这种特殊情况下,没有有效的区别。有些人喜欢外部的
(…)
,因为它在
=
操作符附近给了他们一个函数正在被调用的视觉提示。你应该将此作为答案发布,这样我就可以对其进行投票了。:)好的。