这些js函数结构有什么区别
dataView.onRowCountChanged.subscribe(function (e,args)
{
$("#RowCount").text(args.current);
});
答案 0 :(得分:1)
据我所知,前三个没有区别。
当您编写Immediately-Invoked Function Expression时,外部参数括号可以存在于包装括号内部和外部。想一想,就像另一种语法一样。
所以这个:
(
function() {
}
());
和此:
(
function() {
}
)();
完全平等。
对于第三个示例,分号,在文件串联的情况下,它用作安全措施。编写代码时,您或供应商可能有一个不以分号结尾的脚本。在这种情况下,连接时,以前的文件代码,不以问号结尾将使制作脚本。
在示例中
<强>脚本1.js 强>
var name = 'Nikos';
console.log( name )
<强>脚本2.js 强>
(
function() {
// Do some stuff here
}
)();
<强> concatenation.js 强>
var name = 'Nikos';
console.log( name ) // This line will throw an error, because it is not the last statement in the file.
(
function() {
// Do some stuff here
}
)();
但是如果我们将 script-2.js 更改为:
<强>脚本2.js 强>
;(
function() {
// Do some stuff here
}
)();
concatenation.js 将如下所示:
var name = 'Nikos';
console.log( name )
;( // This will force the previous statement to finish.
function() {
// Do some stuff here
}
)();
最后我发现了这个:
它强制解析器将+后面的部分视为一个 表达。这通常用于调用的函数 立刻,例如:
+function() { console.log("Foo!"); }();
如果没有+,那么如果解析器处于一个期望语句的状态(可以是一个语句) 表达式或几个非表达式语句),单词function 看起来像是函数声明的开头而不是 函数表达式,以及它后面的()(在...的末尾) 上面这一行)将是一个语法错误(就像一个缺席的那样) 名称,在那个例子中)。使用+,它使它成为函数表达式, 这意味着该名称是可选的,并导致引用 函数,可以调用,所以括号是有效的。
- 只是其中一个选项。它也可以是 - ,!,〜或任何其他一元运算符。或者,您可以使用括号(这 更常见,但在句法上也不是更正确或更不正确):
(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());
答案 1 :(得分:0)
它们几乎都是一样的。
前两个完全相同。它们定义函数,调用它并评估结果(如果有人将结果用于任何事情)。是否说(function() { })()
或(function() { })())
是一个有争议的问题。有些短裤有强烈的偏好,如果你不按“他们的”方式做,他们会抱怨。在语义上,它们是相同的。在任何一种情况下,初始括号都会强制解析器将其视为函数表达式。在第一种情况下,函数表达式本身用()
调用,然后前括号关闭;在第二种情况下,调用括起函数表达式的括号表达式。
后两种情况用于防止连接JS文件时可能出现的问题。感叹号也经常用于此目的。此处包含其他问题,例如https://gist.github.com/anonymous/702cf5630bfc7236ba52f6ec8d7cd7a4或this或this或this。