当前位置: 首页 > article >正文

小哆啦探秘《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.kler.cn/a/539841.html

相关文章:

  • 使用Docker + Ollama在Ubuntu中部署deepseek
  • DFS+回溯+剪枝(深度优先搜索)——搜索算法
  • 在请求时打印出实际代理的目标地址
  • 一步一步生成音乐类小程序的详细指南,结合AI辅助开发的思路
  • 鸿蒙 router.back()返回不到上个页面
  • 【redis】数据类型之hash
  • 力扣动态规划-25【算法学习day.119】
  • Versal - Petalinux 2024.2(下载与安装+VD100+安装JupyterLab+SD卡分区+SDT流程)
  • 机器学习数学公式推导笔记
  • 2025清华:DeepSeek从入门到精通.pdf(附下载)
  • vscode中使用code-runner插件运行c程序语法报错code: 1
  • MyBatis的工作流程是怎样的?
  • Spring Boot Actuator使用
  • AI时代医疗大健康微服务编程提升路径和具体架构设计
  • C++11详解(四) -- 新的类功能和包装器
  • GIT创建子模块(submodule)
  • 【共享文件夹】使用Samba服务可在Ubuntu和Windows系统之间共享一个实际的文件夹
  • 告别人工检测!casaim自动化三维激光扫描
  • sqlite 查看表结构
  • Python Pandas(3):DataFrame
  • MATLAB | 基于Theil-Sen斜率和Mann-Kendall检验的栅格数据趋势分析
  • xinference 安装(http导致错误解决)
  • 安全行业大模型SecLLM技术白皮书
  • Linux内核中的软中断与NAPI机制:高效处理网络数据包
  • PostgreSQL SQL优化用兵法,优化后提高 140倍速度
  • 快速上手Vim的使用