可能重复:
What does this mean? (function (x,y)){…}){a,b); in JavaScript
请任何人解释并举例说明下面的Javascript,我找不到任何解释此问题的文件:
(function([arg, arg ...]) {
//javascript code here
})([str, str ...]);
我问的是这个问题,因为我在Google中也看到了Facebook javascript代码,其中大部分使用了这种语法。
答案 0 :(得分:4)
这是匿名函数调用
参数值str, str
作为参数arg, arg
传递给函数,然后执行javascript代码。
与
相同function foo([arg, arg ...]) {
//javascript code here
}
foo([str, str, ...]);
答案 1 :(得分:3)
发生了什么,定义了匿名函数表达式(在括号中) -
(function([arg, arg ...]) {
//javascript code here
})
然后使用函数末尾的()
立即调用该函数,就像调用普通函数var result = someFunction()
一样。所以,例如 -
(function() {
alert('Called by "()" at end of function');
})()
您还可以通过括号 -
将参数传递给anoymous函数(function(username) {
alert('Called by "()" at end of function. Hello ' + username + '!');
})('Dave')
答案 2 :(得分:1)
圆括号中的函数只用strs。
定义的args调用一次包含该函数的圆括号用于限制函数的范围,即函数不能在外部调用。
str变量可以是全局变量(例如jQuery),并且可以通过相应的arg(例如jQuery - > $)进行别名,仅供该函数使用。
通常,这是编写javascript的一种安全的好方法,例如
(function($) {
// code
})(jQuery)
对于函数,局部变量'$'表示全局变量'jQuery'。您可以将“$”定义为另一个脚本(或函数)中的其他内容,并且该变量不会影响此函数中的“$”。
答案 3 :(得分:1)
(function(a, b) {
var x;
})
返回一个匿名函数。由于技术/历史原因,匿名函数必须用括号括起来。
值得注意的是,外部代码无法看到名称a
,b
和x
。相反,只需编写var x;
就可以使x
可访问,从而污染全局命名空间。这相当于经典面向对象语言中的私有变量。
我们也可以写:
var func = function(a, b) {var x;};
// or equivalently:
function foo(a, b) {var x;};
func('arg1', 2);
但是,通过使其他人可以看到函数func
,这将再次污染全局命名空间。由于我们不想再多次调用func
,
(function(a, b) {var x;}) ('arg1', 2);
是使用变量执行代码的完美方式,而不会使这些变量(或任何变量名称)对世界其他地方可见。