javascript语法解释

javascript语法解释,javascript,Javascript,可能重复: 请任何人在下面解释并给出有关Javascript的示例,我找不到任何文档对此进行解释: (function([arg, arg ...]) { //javascript code here })([str, str ...]); 我问这个问题是因为我在谷歌的Facebook javascript代码中也看到了,大多数代码都使用这种语法。这是匿名函数调用 参数值str,str作为参数arg,arg传递给函数,然后执行javascript代码 这和 function fo

可能重复:

请任何人在下面解释并给出有关Javascript的示例,我找不到任何文档对此进行解释:

(function([arg, arg ...]) {

    //javascript code here

})([str, str ...]);

我问这个问题是因为我在谷歌的Facebook javascript代码中也看到了,大多数代码都使用这种语法。

这是匿名函数调用

参数值
str,str
作为参数
arg,arg
传递给函数,然后执行javascript代码

这和

function foo([arg, arg ...]) {
    //javascript code here
}

foo([str, str, ...]);

它是匿名函数调用

参数值
str,str
作为参数
arg,arg
传递给函数,然后执行javascript代码

这和

function foo([arg, arg ...]) {
    //javascript code here
}

foo([str, str, ...]);

现在的情况是,定义了一个匿名函数表达式(在括号中)-

然后在函数末尾使用
()
立即调用该函数,就像调用普通函数
var result=someFunction()
一样。因此,例如-

(function() {
    alert('Called by "()" at end of function');
})()
您还可以通过括号将参数传递给anoymous函数-

(function(username) {
    alert('Called by "()" at end of function. Hello ' + username + '!');
})('Dave')

现在的情况是,定义了一个匿名函数表达式(在括号中)-

然后在函数末尾使用
()
立即调用该函数,就像调用普通函数
var result=someFunction()
一样。因此,例如-

(function() {
    alert('Called by "()" at end of function');
})()
您还可以通过括号将参数传递给anoymous函数-

(function(username) {
    alert('Called by "()" at end of function. Hello ' + username + '!');
})('Dave')

圆括号中的函数仅用strs定义的参数调用一次


包含函数的圆括号用于限制函数的范围,即不能从外部调用函数

str变量可以是全局变量(例如jQuery),并且可以通过其相应的arg(例如jQuery->$)进行别名,以仅用于函数

一般来说,这是编写javascript的一种好的、安全的方法

(function($) {
   // code
})(jQuery)

对于函数,局部变量“$”表示全局变量“jQuery”。这意味着您可以在另一个脚本(或函数)中将“$”定义为其他内容,并且该变量不会影响此函数中的“$”。

圆括号中的函数仅用strs定义的参数调用一次

(function(a, b) {
  var x;
})

包含函数的圆括号用于限制函数的范围,即不能从外部调用函数

str变量可以是全局变量(例如jQuery),并且可以通过其相应的arg(例如jQuery->$)进行别名,以仅用于函数

一般来说,这是编写javascript的一种好的、安全的方法

(function($) {
   // code
})(jQuery)
对于函数,局部变量“$”表示全局变量“jQuery”。这意味着您可以在另一个脚本(或函数)中将“$”定义为其他内容,并且该变量不会影响此函数中的“$”

(function(a, b) {
  var x;
})
返回一个匿名函数。出于技术/历史原因,匿名函数必须用括号括起来

值得注意的是,外部代码看不到名称
a
b
x
。相反,只写
varx
将使
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);
是使用变量执行代码的完美方式,而无需使这些变量(或任何变量名)对世界其他地方可见

返回一个匿名函数。出于技术/历史原因,匿名函数必须用括号括起来

值得注意的是,外部代码看不到名称
a
b
x
。相反,只写
varx
将使
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);

是使用变量执行代码的完美方式,而不必让世界其他地方看到这些变量(或任何变量名)。

搜索javascript闭包。哦,好吧,我会试试,谢谢戈米:)我怀疑搜索闭包会有多大帮助。这种模式被一些人称为一种模式。其他人也有类似的名字。它可以用来创建闭包,但不需要创建闭包,也不是唯一的方法。搜索javascript闭包。哦,好吧,我会试试,谢谢戈米:)我怀疑搜索闭包会有多大帮助。这种模式被一些人称为一种模式。其他人也有类似的名字。它可以用来创建闭包,但不必创建闭包,也不是唯一的方法。包含函数的圆括号不是范围运算符。它们允许立即调用函数。如果它们不在那里,就会出现语法错误。啊,说得好-谢谢。尽管如此,我认为函数不能在外部调用(因为它是匿名的)的观点仍然成立。包含函数的圆括号不是作用域运算符。它们允许立即调用函数。如果它们不在那里,就会出现语法错误。啊,说得好-谢谢。尽管如此,我认为该函数不能在外部调用(因为它是匿名的)的观点仍然成立。您文章顶部的表达式是一个没有名称的函数声明,因此这是一个语法错误。给定一个名称使其在语法上合法,它没有返回语句,因此返回未定义的
,而不是函数。@RobG谢谢。固定:用括号括起来,使其具有语法性