Javascript jQuery中的匿名函数语法

Javascript jQuery中的匿名函数语法,javascript,jquery,syntax,Javascript,Jquery,Syntax,我读过很多关于jQuery及其语法的文章。然而,我还没有完全理解它的语法,我真的很想对它有更好更深入的理解 许多文章没有指出简单的语法规则(以及它们的必要性) 到目前为止,我遇到了一个语法理解问题: 我的HTML: <body> <a href="http://www.jquery.com" title="anchor1">jQuery.com</a> <a href="http://www.jquery.com" title="anch

我读过很多关于jQuery及其语法的文章。然而,我还没有完全理解它的语法,我真的很想对它有更好更深入的理解

许多文章没有指出简单的语法规则(以及它们的必要性)

到目前为止,我遇到了一个语法理解问题:

我的HTML:

<body>
    <a href="http://www.jquery.com" title="anchor1">jQuery.com</a>
    <a href="http://www.jquery.com" title="anchor2">jQuery.com</a>
    <a href="http://www.jquery.com" title="anchor3">jQuery.com</a>

    <!-- JQUERY -->
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

    <script>
        (function ($) {
            // EXAMPLE 1
            $("a").each(function () {
                console.log(this.title);
            });
        })(jQuery);                      // ... everything works fine.


        (function ($) {
            // EXAMPLE 2
            $("a").each(function () {
                console.log(this.title);
            });
        });           // ... missing (jQuery). Why isn't this working?


        $(function () {  // ... notice the $ at the beginning.
            // EXAMPLE 3
            $("a").each(function () {
                console.log(this.title);
            });
        });           // ... missing (jQuery). Why IS this working?


            // EXAMPLE 4
            $("a").each(function () {
              console.log(this.title);
            });                          // ... everything works fine.
    </script>
</body>  

(函数($){
//例1
$(“a”)。每个(功能){
console.log(this.title);
});
})(jQuery);/。。。一切正常。
(函数($){
//例2
$(“a”)。每个(功能){
console.log(this.title);
});
});           // ... 缺少(jQuery)。为什么这不起作用?
$(函数(){//…注意开头的$。
//例3
$(“a”)。每个(功能){
console.log(this.title);
});
});           // ... 缺少(jQuery)。为什么会这样?
//例4
$(“a”)。每个(功能){
console.log(this.title);
});                          // ... 一切正常。
我将澄清我对代码的理解,如果您能以非常基本的方式回答我,我将不胜感激。请指出我所有的误解

我目前的理解和问题:
示例1:我创建了一个匿名JavaScript函数。这个函数就在浏览器读取它的那一刻执行。我将jQuery对象传递给它(使用($),但我不知道为什么这一点很重要)。从现在起,我的函数“讲”jQuery(我假设它理解它的语法)。在JavaScript函数的最后,我再次将jQuery对象传递给它(但为什么这是必要的?)。请开导我

示例2:我尝试了相同的函数,但最后没有使用(jQuery)。现在它不起作用了。我知道缺少什么。但为什么这(jQuery)在最后如此重要

示例3:现在我用$启动Javascript函数,我假设从现在起,我的整个函数都包装在一个jQuery对象中。在这个jQuery对象中,我的函数理解jQuery语法。最后,不需要(jQuery)

示例4:这里我没有构建JavaScript函数。我只是使用jQuery来选择并返回(“a”)。这段代码在浏览器读取它的那一秒就被执行了。无需等待文档准备就绪

我的问题基本上是:
在示例1中,为什么需要开头的($)和结尾的(jQuery)?目的何在


我非常希望能有更长的答案,在这里我可以更深入地理解“正确阅读jQuery语法”,谈论jQuery语法及其要求。谢谢。

问题的解决方案归结为理解JavaScript中的闭包。。。而且jQuery并不多——jQuery只是使用闭包

使用闭包,您可以限定其中的内容,还可以将参数传递给该闭包,以便在中使用

对于您的示例2,如果您将jQuery传递给闭包,它就可以正常工作。 比如:

由于没有在末尾传入jQuery,因此参数
$
未定义,因此在
$('a')
的情况下无法调用。当以我更改的方式编写时,jQuery被分配给$argument,该参数可用于闭包中的代码

与示例3类似,您没有传入jQuery,并且闭包中也没有变量
$
,因此它将无法工作。请注意,您可以将其更改为(仅用于说明目的):

现在jQuery被分配给参数
thisIsJquery
,它在闭包中可用

至于您的exmaple 4,$正在其定义的闭包中使用(而不是其中的另一个闭包),因此可以随时使用

闭包是隐藏实现的一种很好的方法,并提供了一种在JavaScript中使事物
私有化的方法

进一步阅读:


我只关注那些不起作用的东西。以下代码段:

(function ($) {               
   $("a").each(function () {
     console.log(this.title);
   });
}) // not calling function
首先,您没有调用该函数。所以,里面的任何东西都不会运行。所以,您可能认为,通过最后添加
()
,可以解决这个问题

但这还不是全部! 因为
$
引用了
jQuery
,在代码段之外。但是,由于您将命名参数包含为
$
,并且没有向其传递任何内容,因此代码段内部的
$
会将外部的参数隐藏起来。由于没有给它赋值,它是未定义的。所以你会以

undefined is not a function
为了证明这一点,添加
($)
将起作用,就像现在一样,命名参数
$
引用指向jQuery的
$

首先,没有“jQuery语法”。jQuery是一个用JavaScript编写的库,因此语法是JavaScript

示例1:我创建了一个匿名JavaScript函数。这个函数就在浏览器读取它的那一刻执行。我将jQuery对象传递给它(使用($),但我不知道为什么这一点很重要)。从现在起,我的函数“讲”jQuery(我假设它理解它的语法)。在JavaScript函数的最后,我再次将jQuery对象传递给它(但为什么这是必要的?)。请开导我

您似乎知道函数和参数是如何工作的。因此,请查看您的代码:

(function ($) {
        // EXAMPLE 1
        $("a").each(function () {
            console.log(this.title);
        });
    })(jQuery);
您定义了一个接受一个参数的匿名函数:一个名为
$
的变量,该变量在语句
$(“a”)
中使用。然后调用匿名函数并将
jQuery
ob传递给它
undefined is not a function
(function ($) {
        // EXAMPLE 1
        $("a").each(function () {
            console.log(this.title);
        });
    })(jQuery);
function () { }
var myfunction = function ($) { ... };
myfunction(jQuery);