小哆啦探秘《JavaScript高级程序设计》

前几天小哆啦去参加了一场超有挑战性的面试,本以为凭借自己的聪明才智和平时积累的小本事,肯定能轻松应对。可没想到,面试官抛出的一些关于 JavaScript 的深入问题,让小哆啦有点招架不住。面试结束后,面试官人特别好,他看着小哆啦渴望知识的眼神,语重心长地建议小哆啦可以好好研究研究《JavaScript 高级程序设计》这本书,说里面的知识能帮小哆啦在编程的道路上突飞猛进。小哆啦一听,立马来了精神,下定决心要好好研读这本书,还开启了每日读书总结,打算把学到的知识都分享给大家。

第一章:神奇的 JavaScript 诞生啦

你们知道吗?1995 年,有个叫 Brendan Eich 的超级厉害的家伙,就像开了挂一样,只用 10 天就搞出了 JavaScript 的雏形!它一开始叫 Mocha,小哆啦还以为是喜欢的铜锣烧口味呢,后来又改成 LiveScript,最后才定名为 JavaScript。虽然名字里有 Java,但它们俩可没什么关系。JavaScript 一诞生就肩负着给网页 “变魔术” 的使命,让网页能和用户互动起来,比如验证表单、搞点动态显示效果啥的,就像小哆啦从口袋里掏出道具一样神奇,谁能想到它后来在前端开发界混得风生水起,成了 “顶流” 呢!

1.2 JavaScript 的秘密武器库

  • ECMAScript:幕后大管家:这可是 JavaScript 的 “最强大脑”,由 ECMA - 262 标准定义。它就像小哆啦家那个严格的管家,规定了语法、类型、语句这些 “家里的规矩”。不同版本像 ES5、ES6(ES2015)还会时不时带来新 “玩法”,就像小哆啦神奇口袋里的道具,总能给人惊喜。比如 ES6 引入的块级作用域、箭头函数,就像是给 JavaScript 换上了一套更酷炫的装备。有了块级作用域,变量就不会到处 “捣乱” 啦,就像这样:
{let num = 10;console.log(num); // 10
}
// console.log(num); // 报错,num超出了它的“地盘”

箭头函数也超厉害,让函数的写法更简洁,像这样:

// 普通函数
function add(a, b) {return a + b;
}
// 箭头函数
const add = (a, b) => a + b;
  • DOM:网页的超级变形金刚:文档对象模型(DOM)是个独立于语言的 API,它把网页当成一个节点树,就像小哆啦把各种道具分类整理一样。你可以把它想象成一个能随意变形的超级英雄,用它的方法就能给网页 “改头换面”。比如用document.getElementById这个神奇的 “魔法棒”,就能精准获取指定 ID 的元素,想怎么改造就怎么改造。假如网页上有个
    哆啦A梦的小窝
    ,小哆啦就能这样获取它:
const doraemonDiv = document.getElementById('doraemon');
// 然后就可以修改它的内容
doraemonDiv.innerHTML = '欢迎来到哆啦A梦的神奇世界';
  • BOM:浏览器的遥控器:浏览器对象模型(BOM)是用来控制浏览器窗口和框架的,它的核心window对象就像一个万能遥控器。用window.location可以随意切换网页 “频道”,比如小哆啦想跳到自己的官方网站:
window.location.href = 'https://doraemon.com';

用window.alert还能弹出个小提示框,就像小哆啦在和用户 “唠唠嗑”,比如:

window.alert('大家好呀,我是哆啦A梦!');

1.3 JavaScript 的十八般武艺

  • 给 HTML 页面加料:JavaScript 能像个贴心小厨师一样,把动态文本 “塞” 进 HTML 页面里。比如用document.getElementById(‘time’).innerHTML = new Date().toLocaleTimeString()就能实时显示时间,给页面加点 “新鲜热乎” 的内容。要是在小哆啦的网页上,就可以显示 “现在是哆啦 A 梦陪伴你的美好时光:[具体时间]”,想想就觉得很温馨呢!
  • 用户的超级跟屁虫:它可太会 “察言观色” 了,用户一有动作,像点击个按钮,它马上就能用事件处理程序 “接住”。比如有个按钮召唤哆啦A梦,小哆啦可以这样写:
const doraemonButton = document.getElementById('doraemonButton');
doraemonButton.addEventListener('click', function () {window.alert('我来啦!');
});

用户一点击,小哆啦就会蹦出来和大家打招呼啦!

  • HTML 元素的造型师:对 HTML 元素,它能像个时尚造型师一样随意摆弄,改属性、换样式、变内容,无所不能。改变图片src属性切换图片,就像给小哆啦换了身漂亮衣服。比如有个小哆啦的图片<img id="doraemonImage" src="doraemon1.jpg">,当用户点击按钮时,就可以切换成小哆啦的另一个造型:
const doraemonButton = document.getElementById('doraemonButton');
const doraemonImage = document.getElementById('doraemonImage');
doraemonButton.addEventListener('click', function () {doraemonImage.src = 'doraemon2.jpg';
});
  • 数据的严格小卫士:在数据提交到服务器前,它会像个严格的小卫士一样检查输入格式。用function validateEmail(email) { return /^[a-zA - Z0 - 9_.+-]+@[a-zA - Z0 - 9 -]+\.[a-zA - Z0 - 9 -]+$/.test(email); }就能轻松验证邮箱格式。要是小哆啦的粉丝想给小哆啦发邮件,就可以用这个函数检查邮箱格式对不对,这样小哆啦就能更快收到大家的来信啦!
  • cookie 的神奇魔法师:用document.cookie这个神奇的魔法咒语,它就能对 cookie 进行创建、修改等操作。比如设置 cookie document.cookie = “username=小哆啦; expires=Thu, 18 Dec 2024 12:00:00 UTC; path=/”,就可以给用户来点个性化的小设置,记录小哆啦的登录状态或者大家的喜好。

第二章:JavaScript 在 HTML 里的奇妙冒险

2.1 悄悄潜入 HTML 的 JavaScript

  • <script> 元素:神秘的魔法入口<script>元素就像是一个通往 JavaScript 世界的神秘入口,有两种 “打开方式”。内部脚本就像是在这个入口里直接施展魔法,把代码写在<script>标签对之间,比如<script> function sayHello() { alert('Hello!'); } </script>;外部脚本则是通过src属性引入一个外部的.js文件,就像从外面请来了一个更厉害的魔法师,这样代码就能复用,方便又高效。假如有个关于小哆啦的功能函数都写在doraemon.js里,就可以这样引入:<script src="doraemon.js"></script>
  • 藏在何处:位置的小心机:以前 JavaScript 脚本一般都藏在元素底部,为啥呢?因为它怕自己太 “强势”,阻塞了页面渲染,让用户等得不耐烦。现在有了异步和延迟加载这些 “秘密武器”,它的位置就可以更灵活啦。就像小哆啦找道具,以前只能按顺序慢慢找,现在有了任意门就能更高效地找到。

2.2 脚本执行时间:面试高频考点

在面试中,这可是个高频问题。defer和async属性是控制脚本执行时间的关键,其中的重点难点如下:

  • defer 属性的执行顺序问题

    • 理想执行顺序:defer属性给脚本安排了一个 “耐心等待” 的任务,让它在文档解析完成后按顺序执行 ,就像一个有礼貌的客人,不着急表现。理论上,当页面中有多个script标签都使用defer属性时,它们会按照在 HTML 文档中出现的顺序依次执行。

    • 实际执行偏差但在实际情况中,不同脚本之间若存在复杂的依赖关系,或者网络加载速度参差不齐时,执行顺序就不一定能保证了。比如有script1.js、script2.js和script3.js三个脚本,都使用了defer属性,正常情况下应该是script1.js先执行,接着script2.js,最后script3.js 。但如果script2.js依赖的某个资源加载缓慢,而script3.js依赖的资源很快加载完成,就有可能出现script3.js先于script2.js执行的情况,这就可能导致程序出错,所以在使用defer时一定要小心处理这种情况。

  • async 属性的执行特性

    • 异步与非顺序执行:async属性则像是给脚本打了一剂 “加速针”,让它异步下载,下载完马上就执行,不过不保证执行顺序,就像个急性子,一准备好就冲上去了。

    • 多脚本执行顺序:如果一个页面同时存在多个带有async属性的脚本,它们的执行顺序是不确定的,完全取决于各自的下载完成时间。比如有scriptA.js和scriptB.js都使用async,如果scriptA.js下载快,它就先执行,反之则scriptB.js先执行。

在实际开发中,我们要根据脚本之间的依赖关系和对执行顺序的要求,合理选择defer和async属性。

结语

小哆啦在研读《JavaScript 高级程序设计》的过程中,收获满满。要是小哆啦的这些读书随笔能帮到你,欢迎关注小哆啦的专栏,让我们一起深入探索这本书,解锁更多 JavaScript 的奥秘,一起在编程的世界里快乐成长!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14248.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库系统架构与DBMS功能探微:现代信息时代数据管理的关键

欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭&#xff5e; ??? 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。?? 希望在这里&#xff0c;我们能一起探…

优惠券平台(一):基于责任链模式创建优惠券模板

前景概要 系统的主要实现是优惠券的相关业务&#xff0c;所以对于用户管理的实现我们简单用拦截器在触发接口前创建一个单一用户。 // 用户属于非核心功能&#xff0c;这里先通过模拟的形式代替。后续如果需要后管展示&#xff0c;会重构该代码 UserInfoDTO userInfoDTO new…

搭建集成开发环境PyCharm

1.下载安装Python&#xff08;建议下载并安装3.9.x&#xff09; https://www.python.org/downloads/windows/ 要注意勾选“Add Python 3.9 to PATH”复选框&#xff0c;表示将Python的路径增加到环境变量中 2.安装集成开发环境Pycharm http://www.jetbrains.com/pycharm/…

模板的进阶

非类型模板参数 模板参数分类类型形参与非类型形参 。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在 class 或者 typename 之类的参数类型名称 。 非类型形参&#xff0c;就是用一个常量作为类 ( 函数 ) 模板的一个参数&#xff0c;在类 ( 函数 ) 模板中可将…

windows安装linux子系统【ubuntu】操作步骤

1.在windows系统中开启【适用于Linux的Windows子系统】 控制面板—程序—程序和功能—启用或关闭Windows功能—勾选适用于Linux的Windows子系统–确定 2.下载安装Linux Ubuntu 22.04.5 LTS系统 Ununtu下载链接 3.安装完Ununtu系统后更新系统 sudo apt update4.进入/usr/l…

【大数据技术】搭建完全分布式高可用大数据集群(Kafka)

搭建完全分布式高可用大数据集群(Kafka) kafka_2.13-3.9.0.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群 Kafka 的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/software目录下,软件安装至/opt目录下。 安…

万字详解 MySQL MGR 高可用集群搭建

文章目录 1、MGR 前置介绍 1.1、什么是 MGR1.2、MGR 优点1.3、MGR 缺点1.4、MGR 适用场景 2、MySQL MGR 搭建流程 2.1、环境准备2.2、搭建流程 2.2.1、配置系统环境2.2.2、安装 MySQL2.2.3、配置启动 MySQL2.2.4、修改密码、设置主从同步2.2.5、安装 MGR 插件 3、MySQL MGR 故…

Linux高级IO

文章目录 &#x1f965;IO的基本概念&#x1f347;钓鱼五人组&#x1f348;五种IO模型&#x1f349;高级IO重要概念同步通信 VS 异步通信阻塞 VS 非阻塞 &#x1f34a;其他高级IO&#x1f34b;阻塞IO&#x1f34b;‍&#x1f7e9;非阻塞IO &#x1f965;IO的基本概念 什么是IO…

摄像头模块烟火检测

工作原理 基于图像处理技术&#xff1a;分析视频图像中像素的颜色、纹理、形状等特征。火焰通常具有独特的颜色特征&#xff0c;如红色、橙色等&#xff0c;且边缘呈现不规则形状&#xff0c;还会有闪烁、跳动等动态特征&#xff1b;烟雾则表现为模糊、无固定形状&#xff0c;…

4.3 线性回归的改进-岭回归/4.4分类算法-逻辑回归与二分类/ 4.5 模型保存和加载

4.3.1 带有L2正则化的线性回归-岭回归 岭回归&#xff0c;其实也是一种线性回归&#xff0c;只不过在算法建立回归方程的时候1&#xff0c;加上正则化的限制&#xff0c;从而达到解决过拟合的效果 4.3.1.1 API 4.3.1.2 观察正则化程度的变化&#xff0c;对结果的影响 正则化力…

CSS outline详解:轮廓属性的详细介绍

什么是outline&#xff1f; outline&#xff08;轮廓&#xff09;是CSS中一个有趣的属性&#xff0c;它在元素边框&#xff08;border&#xff09;的外围绘制一条线。与border不同的是&#xff0c;outline不占用空间&#xff0c;不会影响元素的尺寸和位置。这个特性使它在某些…

设计模式.

设计模式 一、介绍二、六大原则1、单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09;2、开闭原则&#xff08;Open-Closed Principle, OCP&#xff09;3、里氏替换原则&#xff08;Liskov Substitution Principle, LSP&#xff09;4、接口隔离原则&am…

硬件工程师思考笔记02-器件的隐秘角落:磁珠与电阻噪声

目录 引言 一、磁珠&#xff1a;你以为的“噪声克星”&#xff0c;可能是高频杀手 1. 磁珠的阻抗特性与误区 2. 案例&#xff1a;磁珠引发的5G射频误码率飙升 二、电阻&#xff1a;静默的噪声制造者 1. 电阻噪声的两种形态 2. 案例&#xff1a;ADC精度被电阻噪声“偷走” 三、设…

mysql 不是内部或外部命令,也不是可运行的程序或批处理文件

mysql 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件 前言描述1、&#x1f331;环境变量配置&#xff08;高级系统设置&#xff09;&#xff1a;2、&#x1f331;环境变量配置&#xff08;系统属性&#xff09;&#xff1a;3、&#x1f331;环境变量配置&…

极客说|利用 Azure AI Agent Service 创建自定义 VS Code Chat participant

作者&#xff1a;卢建晖 - 微软高级云技术布道师 「极客说」 是一档专注 AI 时代开发者分享的专栏&#xff0c;我们邀请来自微软以及技术社区专家&#xff0c;带来最前沿的技术干货与实践经验。在这里&#xff0c;您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&a…

在rtthread中,scons构建时,它是怎么知道是从rtconfig.h找宏定义,而不是从其他头文件找?

在rtthread源码中&#xff0c;每一个bsp芯片板级目录下都有一个 SConstruct scons构建脚本的入口&#xff0c; 在这里把rtthread tools/目录下的所有模块都添加到了系统路径中&#xff1a; 在tools下所有模块中&#xff0c;最重要的是building.py模块&#xff0c;在此脚本里面…

Redis基础--常用数据结构的命令及底层编码

零.前置知识 关于时间复杂度,按照以下视角看待. redis整体key的个数 -- O(N)当前key对应的value中的元素个数 -- O(N)当前命令行中key的个数 -- O(1) 一.string 1.1string类型常用命令 1.2string类型内部编码 二.Hash 哈希 2.1hash类型常用命令 2.2hash类型内部编码 2.3ha…

【leetcode100】岛屿的最大面积

1、题目描述 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&#xff09;包围着。 岛屿的面积…

将仓库A分支同步到仓库B分支,并且同步commit提交

一、 问题 有一仓库A 和 一仓库B&#xff0c; 需要将仓库A分支a1所有提交同步推送到仓库B分支b1上 二、 解决 2.1、 首先需要仓库A、仓库B的权限&#xff0c; 2.2、将仓库A clone到本地&#xff0c; 进入A目录&#xff0c;并且切换到a1分支 cd A ## A 为A仓库clone到本地代…

Matplotlib基础01( 基本绘图函数/多图布局/图形嵌套/绘图属性)

Matplotlib基础 Matplotlib是一个用于绘制静态、动态和交互式图表的Python库&#xff0c;广泛应用于数据可视化领域。它是Python中最常用的绘图库之一&#xff0c;提供了多种功能&#xff0c;可以生成高质量的图表。 Matplotlib是数据分析、机器学习等领域数据可视化的重要工…