Javascript 为什么jQuery语法如此奇怪-它是如何被解析的?

Javascript 为什么jQuery语法如此奇怪-它是如何被解析的?,javascript,jquery,Javascript,Jquery,我试图理解jQuery,但语法对我来说太奇怪了,这阻碍了我的理解。我甚至不明白常规JavaScript解析器是如何解析它的!我可以阅读示例代码,我会从附带的材料中了解它在做什么,但我不了解如何做 我知道,$只是jQuery的别名,但这并不能回答问题。以经典的jQuery函数为例,该函数用于将事情延迟到页面完全加载: $(document).ready(function() { ... }); 或者jQuery选择器,用于选择DOM中的所有p元素并应用CSS规则: $('p').css('c

我试图理解jQuery,但语法对我来说太奇怪了,这阻碍了我的理解。我甚至不明白常规JavaScript解析器是如何解析它的!我可以阅读示例代码,我会从附带的材料中了解它在做什么,但我不了解如何做

我知道,
$
只是jQuery的别名,但这并不能回答问题。以经典的jQuery函数为例,该函数用于将事情延迟到页面完全加载:

$(document).ready(function() {
  ...
});
或者jQuery选择器,用于选择DOM中的所有
p
元素并应用CSS规则:

$('p').css('color', 'blue');
所以。。。不知何故,
document
'p'
被识别为键,并与适当的值关联,对吗?但这似乎不可能是真的,因为那时jQuery必须预先计算它将返回的任何可能需要的键的结果,包括jQuery可能不知道的元素ID!那么它到底是如何工作的呢


(编辑以修复描述代码时的错误)

答案比您想象的要简单。
$
确实是jQuery库的别名。。。它作为一个函数实现。当您看到如下代码时:

$(document).ready(function() {
  ...
});
您看到的是:

  • 正在调用的jQuery函数(
    $
  • 。。。使用参数
    文档
  • 。。。它返回一个对象
  • 。。。它有一个
    ready
    方法,被调用
  • 。。。使用匿名函数作为其参数
  • 当我第一次遇到它时,我遇到了麻烦。我知道在JavaScript中,函数是一级对象(这就是为什么可以将函数作为参数传递),但不知何故,这并没有让我清楚地认识到,显然是一个大型复杂对象(即jQuery库)的东西也可能是函数

    事实上,两者都有。它是一个函数,也是一个有自己属性的对象,包括函数。这就是为什么有时您会看到如下代码:

    $.getJSON('http://www.foo.com/search?q=....
    

    在我们前面的代码中,
    $
    是我们正在调用的函数。在这段代码中,
    $
    是我们正在调用的函数
    getJSON
    所在的对象。

    是的,正如常见问题解答中明确鼓励的那样。问题基本上是我今天上午10点会怎么问这个问题;答案是我现在知道的,我偶然发现了一个资源,它碰巧提到了一个关键事实,即jQuery库是作为一个单一函数实现的。这就是为什么,毕竟,当你在屏幕上提问时,有一个很大的复选框问你是否想回答自己的问题,并让您同时撰写问题和答案。再一次,这是明确鼓励的。对不起,如果我看起来是防御性的——从这个和其他网站的Meta来看,似乎有一些用户仍然相信回答你自己的问题某种程度上是“作弊”,而事实并非如此。至于为什么它写得好像是两个不同的人,这是迄今为止我发现的最好的方式,让问题和答案变得清晰,把它写在理解我之前和理解我之后的交流中。他们都是我,但这似乎与问题或答案无关,所以我不提。在第二个示例中,它实际上是对选择器中的元素应用CSS规则,而不是设置类。(
    .addClass()
    )。+1是一个非常好的问题。哦,你说得对。您认为我应该更新问题以修复该错误吗?是的,我认为这样做是可以的。:)但是如果您没有意识到$是一个函数,那么您可能知道jQuery必须是常规Javascript,但不知道解析器是如何看待它的。不使用paren访问对象键的推理无法解释访问的内容和方式。如果您不知道它是一个函数,您将无法在StackOverflow上搜索“jQuery的$a函数和对象是什么样子的?”。