Javascript jQuery中的匿名函数语法
我读过很多关于jQuery及其语法的文章。然而,我还没有完全理解它的语法,我真的很想对它有更好更深入的理解 许多文章没有指出简单的语法规则(以及它们的必要性) 到目前为止,我遇到了一个语法理解问题: 我的HTML: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
<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);