window 对象上的 jquery 属性

简短几句

本文作为 jquery 学习之路的开端,首先要知道 jquery 是什么?引用 jQuery 中文文档的正文第一句话:

jQuery 是一个高效、精简并且功能丰富的 JavaScript 工具库。

从中提取关键词:JavaScript工具库

JavaScript

jquery 既然和 js 相关,那么就来回顾一下 javascript 的组成:

  • 核心(ECMAScript)
  • 文档对象模型(DOM)
  • 浏览器对象模型(BOM)

这里对主要内容不做过多赘述,只点明基本概念及作用:

ECMAScript 即 ECMA-262 定义的语言,并不局限于 Web 浏览器。

DOM 是一个应用编程接口,用于在 HTML 中使用扩展的 XML。提供网页内容交互的方法和接口。

BOM 是浏览器对象接口,用于支持访问和操作浏览器的窗口。提供浏览器交互的方法和接口。

三者关系:Web 浏览器只是 ECMAScript 实现可能存在的一种宿主环境。宿主环境提供 ECMAScript 的基准实现和与环境自身交互必需的扩展(DOM、BOM等)。扩展使用 ECMAScript 核心类型和语法,提供特定于环境的额外功能(其它环境还包括 node.js 等)。

工具库

作为一名 js 程序员,肯定对 javascript 不会陌生,同样也对浏览器不会陌生。前端开发大部分都是围绕着 web 浏览器进行。在浏览器崛起的时代,jQuery 的出现是历史必然。

它提供的 API 易于使用且兼容众多浏览器,这让诸如 HTML 文档遍历和操作、事件处理、动画和 Ajax 操作更加简单。

学习源码,学的是它的设计思想。在这之前,得先知道如何使用它。

引入 jQuery

index.html中引入 jQuery,只需要一个一个 <script> 标签。引入它我们即能通过 $ 进行访问其方法

csharp 复制代码
$('#app').add()

这是使用 jQuery 的常规操作。那么由此发问:

为什么是 <math xmlns="http://www.w3.org/1998/Math/MathML"> ? ? </math>? 从何而来?

显而易见的是:

$ 只是一个字面量,而且是由通过 <script> 标签引入的 jQuery "导出" 的产物。

在 jQuery 中它是这么做的:使用一个立即执行函数 ,以 window 对象入参,将 jQuery 属性添加到 window 对象中。

javascript 复制代码
(function (window, undefined) {
  // ....
})(window);

在 js 中万物皆可是对象,在调用方法时我们可以直接 obj.funA(),此处等同于 window.$('#app'),那么发问:

为什么是 window 对象,而不是其它对象?

在开篇说到 JavaScript 的组成,BOM 是使用 js 开发 Web 应用程序的核心。

window 对象则是 BOM 的核心。表示浏览器实例。 window 对象在浏览器中拥有双重身份,一个是 ECMAScript 中的 Global 对象,另一个是浏览器窗口的 js 接口。

不意外的是:因为 window 对象的属性在全局作用域中有效,所以浏览器 API 及相关构造函数都已 window 对象属性的形式暴露出来。 jQuery 作为 js 的工具库同理。

那么 window 对象内部肯定是不存在 $成员, 在函数内部,我们只要为 window 对象添加 $属性即可

javascript 复制代码
// 直接添加属性
window.$ = 123;

除此之外,js 中因为全局作用域的原因,可以通过 var 来声明变量使其添加到 window 对象中

csharp 复制代码
// 通过 var
var $ = 123;

在 jQuery 中使用的是立即执行函数操作 window 对象,而非 var 关键字。

既然可以使用 var,那还用立即执行函数干什么?

立即执行函数是什么?

立即执行函数就是声明一个匿名函数,并马上调用这个匿名函数

其作用是:创建一个独立的作用域(块级作用域),这个作用域里面的变量,外面访问不到(即避免"变量污染")

在此处举个例子:

css 复制代码
for (var i = 0; i < 5; i++) {
    setTimeout(() => {
        console.log(i);
    }, 1000 * i);
}
​

此处输出的是 5, 5, 5, 5, 5,但是改造一下:

javascript 复制代码
for (var i = 0; i < 5; i++) {
  (function (j) {
    setTimeout(function () {
      console.log(j);
    }, 0);
  })(i);
}

此处输出的是 0, 1, 2, 3, 4

jQuery 是工具库,而不是框架?

来到 jQuery 的本质:

jQuery 主要提供了一系列的工具和方法,用于简化JavaScript代码的编写和操作。

相比于常见的前端架构模式 MVC 和 MVVM,jQuery 更加轻量,简化 Web 操作。

相关推荐
m0_7482338811 分钟前
黑马程序员JavaWeb开发教程(前端部分) ---笔记分享
前端·笔记
温轻舟17 分钟前
前端开发 -- 自定义鼠标指针样式
开发语言·前端·javascript·css·html·温轻舟
天天打码36 分钟前
ThinkPHP项目如何关闭runtime下Log日志文件记录
android·java·javascript
冰镇屎壳郎1 小时前
前端安全 常见的攻击类型及防御措施
前端·安全·前端安全
2401_857617621 小时前
“无缝购物体验”:跨平台网上购物商城的设计与实现
java·开发语言·前端·安全·架构·php
2401_857439691 小时前
智慧社区电商系统:提升用户体验的界面设计
前端·javascript·php·ux
我是高手高手高高手1 小时前
ThinkPHP8多应用配置及不同域名访问不同应用的配置
linux·服务器·前端·php
小李小李不讲道理1 小时前
行动+思考 | 2024年度总结
前端·程序员·年终总结
uhakadotcom1 小时前
代码人生-精选文章周刊
前端·后端·github
csdnLN2 小时前
$.ajax() 对应事件done() 、fail()、always() 的用法
前端·javascript·ajax