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 操作。

相关推荐
阿伟来咯~31 分钟前
记录学习react的一些内容
javascript·学习·react.js
吕彬-前端36 分钟前
使用vite+react+ts+Ant Design开发后台管理项目(五)
前端·javascript·react.js
学前端的小朱39 分钟前
Redux的简介及其在React中的应用
前端·javascript·react.js·redux·store
guai_guai_guai1 小时前
uniapp
前端·javascript·vue.js·uni-app
也无晴也无风雨1 小时前
在JS中, 0 == [0] 吗
开发语言·javascript
bysking2 小时前
【前端-组件】定义行分组的表格表单实现-bysking
前端·react.js
王哲晓2 小时前
第三十章 章节练习商品列表组件封装
前端·javascript·vue.js
fg_4112 小时前
无网络安装ionic和运行
前端·npm
理想不理想v2 小时前
‌Vue 3相比Vue 2的主要改进‌?
前端·javascript·vue.js·面试
酷酷的阿云2 小时前
不用ECharts!从0到1徒手撸一个Vue3柱状图
前端·javascript·vue.js