简单的JavaScript问题?

时间:2009-09-28 20:52:42

标签: javascript

我希望有人可以解释javascript的以下用法...

我有一个页面,里面有一个脚本标签,内容如下所示

(function($){
     // code 
     // and stuff
})(jQuery);

我只是想了解这主要是什么,

  1. 开头的左括号
  2. 使用$ symbol
  3. 最后括号中的jQuery
  4. 谢谢!

5 个答案:

答案 0 :(得分:5)

这是一个匿名函数。

当jQuery(使用“$”)与另一个库(原型也使用“$”)冲突时,通常会使用您提供的具体示例。

这样做是说在函数中使用“$”时,它就是引用jQuery对象。

正常:

$("foo").doStuff()

避免冲突:

jQuery("foo").doStuff()

使用匿名函数避免冲突:

(function($){
  $("foo").doStuff();
})(jQuery)

答案 1 :(得分:2)

在最高级别,它声明一个函数并在同一语句中调用它。

让我们把它分解成组成部分:

首先,我们可以在函数中使用$作为参数/变量名,就像其他任何东西一样:

function foo($)
{
    alert($);
}

foo('hi'); //alerts 'hi'

其次,我们可以为变量分配一个函数:

var foo = function($) {
    alert($);
}

foo('hi'); //alerts 'hi'

最后,我们不必提供函数名称 - 我们可以声明它们。我们将它们包装在括号中以将整个函数声明封装为var,然后我们调用它(就像上面一样):

(function($) {
    alert($);
})('hi');

在您的情况下,jQuery是将某个对象作为$参数传递给函数。可能是jQuery库的根对象,所以你可以调用它上面的函数。

答案 2 :(得分:0)

  1. 括号包装匿名函数,因此可以立即调用它,参数是对jQuery的引用

  2. $是JavaScript中的有效变量名,因此许多框架使用它来简化。通过将其作为函数参数包含在此处,您说要使用$作为jQuery的别名。这使您可以尽可能缩短代码并节省用户的带宽。

  3. 在第一部分回答 - 您正在向匿名函数发送对jQuery对象/框架的引用。

答案 3 :(得分:0)

简言之:

这声明了一个匿名函数,它接受一个参数,由$的局部变量名称引用,然后立即调用作为jQuery对象的第一个参数传递的函数。

简短地说:

在javascript中,函数声明如下:

function foo(arg1,arg2){

}

稍后可以调用函数foo:

foo(“arg 1”,“arg 2”);

但在javascript函数中是一等公民;如果您愿意,可以将函数存储在变量中。执行此操作时,变量名称是函数名称,因此您可以这样写:

var foo = function(arg1,arg2){

};

后面的分号是必需的,因为变量声明(和赋值)是一个语句。之后,可以调用函数foo:

foo(“arg 1”,“arg 2”);

这里的优点是你可以将函数传递给另一个函数,或者将它存储在一个数组中,或者其他什么。这种函数称为匿名函数(因为它们没有函数名)。

在匿名函数foo中,如上所示,您可以声明局部变量,这些变量保留在该函数的范围内,并且不存在于声明函数的范围内。例如,本地arg1和arg2变量不存在于变量foo的范围内(但它们确实存在于foo中存储的匿名函数中)。

这个技巧允许我们创建一个私有块,我们可以在其中控制所命名的内容,而不必担心踩踏别人的命名空间。

您可以按如下方式编写您提供的示例:

var foo = function($){

}; FN(jQuery的);

这是同一件事,但有那个丑陋的中间变量。可能不明显的是,匿名函数的声明“返回”一个函数引用,可以稍后调用......或者同时,仅通过添加()的函数调用语法。

代码正在做的是定义一个匿名函数,它创建一个私有作用域,然后立即调用它而不存储在变量中。像这样:

功能(ARG1){

}(“arg 1”);

我不完全确定为什么匿名函数定义会有一组额外的括号,但它们至少使代码更具可读性/逻辑性。您只是将一个参数传递给括号表达式的结果,该结果恰好是一个函数:

(函数(ARG1){

})(“arg 1”);

所有这些都允许jQuery拥有一个名为jQuery的全局范围变量,但也允许用户使用$的简写而不与其他使用相同名称的javascript框架冲突。

答案 4 :(得分:-1)

让我们首先看一下内部函数声明:

function($){
     // code 
     // and stuff
}

这是一个匿名函数声明,其中一个参数名为$。然后将该函数包装在括号中,并通过(jQuery)作为参数附加jQuery来调用。