面试官问‘JS 和 DOM 啥关系’,我答‘人和房子’,当场发 offer!
这是一个很关键的问题。很多人学前端时会把JavaScript和DOM混为一谈觉得“JS就是用来操作网页元素的”但实际上它们是完全不同的两个东西只是配合得特别紧密。我用对比的方式来帮你理清。文章目录一、它们是什么二、它们的关系人和房子的关系三、它们的区别三个核心维度1. 所属领域不同2. 生命周期不同3. 存在形式不同四、它们是如何协作的经典案例五、一个生活化的类比总结总结一句话一、它们是什么概念本质类比JavaScript (JS)一门编程语言。它有自己的语法变量、函数、循环等就像英语或汉语一样是一套表达逻辑的工具。人。拥有思考、计算、决策的能力。DOM一个应用程序接口。它是浏览器把网页HTML变成的对象模型并提供了一套操作方法。房子。是一个结构体有门、有窗、有墙。二、它们的关系人和房子的关系JavaScript 和 DOM 的关系就像“人”和“房子”的关系。JavaScript 是人它有脑子逻辑能决定要干什么比如“我要开灯”。DOM 是房子它是一个固定的结构里面有灯、有开关、有门。人怎么开灯如果没有 DOM 提供的“开关接口”人脑子再聪明也没办法把灯打开。JS 怎么操作网页如果没有 DOM 提供的 API比如getElementById、addEventListenerJS 只是一门干巴巴的计算语言它没办法让网页上的文字变色也没法让图片隐藏。结论JS 通过 DOM 这个“接口”来操作网页。三、它们的区别三个核心维度1. 所属领域不同JS属于ECMAScript规范。它定义的是if/else、for循环、数组、函数、Promise这些语法。无论在浏览器里还是在服务器上JS 的语法核心是不变的。DOM属于W3C万维网联盟规范。它定义的是document、window、Element、Node这些浏览器特有的东西。举例你在 Node.js 环境服务器端写 JS 代码你可以写console.log(11)可以写fs.readFile读文件。但是如果你在 Node.js 里写document.getElementById程序会直接报错。因为服务器端没有“浏览器”不存在 DOM 这个东西。这说明JS 可以脱离 DOM 存在。2. 生命周期不同JS只要代码在运行它就在。它的生命周期由代码执行过程决定。DOM由浏览器渲染过程决定。浏览器先下载 HTML边解析边生成 DOM 树。如果用户关闭了标签页这个页面的 DOM 就被销毁了。关键点JS 可以创建DOMdocument.createElement也可以销毁DOMremoveChild。DOM 也可以触发JS比如用户点击按钮DOM 的事件机制调用 JS 函数。3. 存在形式不同JS是逻辑流时序性的。它是一行一行执行的指令。DOM是结构体空间性的。它是一棵树有节点、有层级。四、它们是如何协作的经典案例假设页面上有一个空列表ul你点击按钮JS 要向里面添加一个li。浏览器先把 HTML 解析成 DOM 树里面有按钮、有空的ul。JS 登场你的 JS 代码里写了button.addEventListener(click, function...)。这里JS 调用了 DOM 提供的事件接口。JS 继续执行在回调函数里JS 写let newLi document.createElement(li)。这里JS 调用了 DOM 提供的创建元素接口。JS 再次执行JS 写ul.appendChild(newLi)。这里JS 调用了 DOM 提供的添加子节点接口。浏览器渲染引擎监听到 DOM 结构变化重新计算样式重绘屏幕用户看到了新的li。在这个过程里逻辑什么时候添加添加什么内容是JS提供的。实体那个按钮、那个列表、那个新增的 li是DOM提供的。操作方式.createElement、.appendChild是DOM API提供的。五、一个生活化的类比总结把网页开发想象成“拍皮球”皮球DOM。它是一个客观存在的物体结构。它有弹性、有颜色、有位置属性。手JavaScript。手有力量能决定拍多大力什么时候拍逻辑。拍球这个动作JS 调用 DOM API。手JS不能直接让皮球DOM自己跳起来必须通过“拍”这个动作API去作用在皮球上。如果没有手JS皮球DOM就在地上静止不动静态页面。如果没有皮球DOM手JS只能在空中乱挥什么都拍不到无法操作界面。总结一句话JavaScript 是“能力者”DOM 是“操作对象”。JS 拥有计算和逻辑的能力但必须在浏览器提供的 DOM 这个“对象模型”上施展才能实现网页的动态交互。两者分离但又紧密配合。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2443499.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!