为什么jQuery语法如此奇怪 - 它甚至如何被解析?

afe*_*par 3 javascript jquery

我正在尝试理解jQuery,但是我对语法看起来很陌生而受到阻碍.我甚至不理解常规JavaScript解析器如何解析它!我可以阅读示例代码,我将从附带的材料中了解它正在做什么,但我不明白如何.

我知道这$只是jQuery的别名,但这并没有回答这个问题.使用经典的jQuery函数来延迟事物直到页面完全加载:

$(document).ready(function() {
  ...
});
Run Code Online (Sandbox Code Playgroud)

或jQuery选择器,选择pDOM中的所有元素并应用CSS规则:

$('p').css('color', 'blue');
Run Code Online (Sandbox Code Playgroud)

所以......莫名其妙地document'p'被认可的钥匙,并用适当的值相关联的,对不对?除了它似乎不是真的,因为然后jQuery必须预先计算它将要返回的任何可能的键返回的结果,包括jQuery可能无法知道的元素id!那它究竟是如何起作用的呢?

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

afe*_*par 9

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

$(document).ready(function() {
  ...
});
Run Code Online (Sandbox Code Playgroud)

你看到的是:

  1. $正在调用jQuery函数()...
  2. ......有了这个论点document......
  3. ...返回一个对象......
  4. ...有一个ready方法,被称为...
  5. ...为其参数提供匿名函数.

当我第一次碰到它时,我遇到了麻烦.我知道在JavaScript中,函数是第一类对象(这就是为什么你可以传递一个作为参数),但不知何故,这并没有让我明白那些显然是一个大而复杂的对象(即jQuery) library)也可能是一个函数.

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

$.getJSON('http://www.foo.com/search?q=....
Run Code Online (Sandbox Code Playgroud)

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