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

前端高频面试题深度解析(JavaScript + Vue + jQuery)

前端高频面试题深度解析(JavaScript + Vue + jQuery)


一、JavaScript 核心问题解析
  1. 事件冒泡与捕获

    • 机制对比
      graph LR
      A[捕获阶段] -->|Window→父元素| B[目标元素]
      B -->|子元素→父元素| C[冒泡阶段]
      
    • 阻止方法
      // 阻止冒泡(常用)
      event.stopPropagation();// 阻止捕获 + 冒泡 + 默认行为(慎用)
      event.stopImmediatePropagation();
      
  2. 变量声明对比

    特性varletconst
    作用域函数级块级块级
    变量提升
    重复声明
    暂时性死区
    全局属性绑定
    // 典型面试陷阱
    for (var i = 0; i < 3; i++) {setTimeout(() => console.log(i), 100); // 输出3次3
    }
    for (let j = 0; j < 3; j++) {setTimeout(() => console.log(j), 100); // 输出0,1,2
    }
    

二、Vue.js 深度问题解析
  1. v-if vs v-show 核心区别

    维度v-ifv-show
    DOM操作销毁/重建节点display切换
    编译过程惰性编译始终编译
    性能高切换成本高初始渲染成本
    适用场景运行时条件少变频繁切换
    <!-- 源码级原理 -->
    <div v-if="show">内容</div>
    <!-- 编译为 -->
    show ? _c('div',[...]) : _e()<div v-show="show">内容</div>
    <!-- 编译为 -->
    _c('div', { directives: [{name:"show", value: show}] })
    
  2. Vue 3 Teleport 核心价值

    • 解决问题:组件嵌套导致的z-index/overflow:hidden样式污染
    • 实现原理
      <teleport to="body"><div class="modal">弹窗内容</div>
      </teleport><!-- 渲染结果 -->
      <body><div id="app">...</div><div class="modal">弹窗内容</div> <!-- 移出app根节点 -->
      </body>
      
    • 应用场景
      • 全屏模态框
      • 通知提示框
      • 下拉菜单(避免父容器overflow:hidden裁剪)

三、jQuery 经典问题解析
  1. 事件绑定演进史

    timeline2006年 : .bind()2009年 : .live() : 基于document委托2011年 : .delegate() : 指定委托容器2013年+ : .on() : 统一API
    
    • 性能对比
      // 低效(绑定1000个元素)
      $('table tr').on('click', handler); // 高效(单事件委托)
      $('table').on('click', 'tr', handler);
      
  2. 动画队列控制

    • .stop()
      • 立即停止当前动画
      • 队列中动画继续执行
      $('.box').stop(true, false); // 清除队列,不跳转最终状态
      
    • .finish()
      • 立即完成所有动画
      • 跳转到最终状态
      $('.box').finish(); // 直接显示动画结束状态
      
    • 使用场景
      • 高频触发的hover动画:.stop(true, true)
      • 页面切换时:.finish()

四、综合原理深度剖析
  1. 虚拟DOM Diff算法(Vue/React通用)

    新旧VNode对比
    同层比较
    Key值比对
    直接替换
    Key匹配?
    复用节点
    新建节点
    属性更新
    • Key的作用:复用相同元素避免重建(类似数据库主键)
    • 优化策略:首尾指针快速比对
  2. Promise.all 手写实现

    Promise.myAll = (promises) => {return new Promise((resolve, reject) => {let results = [];let completed = 0;promises.forEach((promise, i) => {Promise.resolve(promise) // 处理非Promise值.then(res => {results[i] = res; // 保持结果顺序if (++completed === promises.length) resolve(results);}).catch(reject); // 任一失败立即结束});if (promises.length === 0) resolve([]); // 空数组处理});
    };
    

五、工程化问题解决方案
  1. Vue 性能优化实战

    • 组件级优化
      <!-- 1. 函数式组件 -->
      <template functional><div>{{ props.message }}</div>
      </template><!-- 2. 计算属性缓存 -->
      <script>
      export default {computed: {// 避免模板内复杂计算filteredList() { /* ... */ } }
      }
      </script>
      
    • 项目级优化
      // vite.config.js
      export default {build: {rollupOptions: {output: {manualChunks: {vue: ['vue', 'vue-router'],utils: ['lodash', 'dayjs']}}}}
      }
      
  2. 内存泄漏排查方案

    • Vue 特定场景
      // 解决方案1:组件销毁前移除事件
      beforeUnmount() {window.removeEventListener('resize', this.handleResize);
      }// 解决方案2:避免v-if和v-for共用
      <div v-for="item in list" :key="item.id"><ChildComponent v-if="item.visible" />
      </div>
      
    • 通用排查流程
      1. Chrome DevTools → Memory → Heap snapshot
      2. 操作前后两次快照对比
      3. 检查Detached DOM节点
      4. 定位未释放的事件监听器
http://www.lryc.cn/news/585262.html

相关文章:

  • 云蝠智能 VoiceAgent重构企业呼入场景服务范式
  • SpringCloud云间剑歌 第一章:云间阁现,群雄并起
  • 智能运维管理平台:AI赋能的数字化转型引擎
  • DNS(Domain Name System,域名系统)
  • java底层的native和沙箱安全机制
  • JavaScript加强篇——第四章 日期对象与DOM节点(基础)
  • 如何批量旋转视频90度?
  • 【DataFlow】数据合成流水线工具
  • Neo4j启动
  • 将手工建模模型(fbx、obj)转换为3dtiles的免费工具!
  • 抽丝剥茧,一步步推导“大模型强化学习的策略梯度公式”
  • manifest.json只有源码视图没其他配置
  • Monorepo 与包管理工具:从幽灵依赖看 npm 与 pnpm 的架构差异
  • php的原生类
  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(中)
  • 安全领域的 AI 采用:主要用例和需避免的错误
  • 将Blender、Three.js与Cesium集成构建物联网3D可视化系统
  • Redis数据库基础篇章学习
  • 2025年NSSCTF-青海民族大学 2025 新生赛WP
  • 【Spring Boot】Spring Boot 4.0 的颠覆性AI特性全景解析,结合智能编码实战案例、底层架构革新及Prompt工程手册
  • 《棒球规则介绍》领队和主教练谁说了算·棒球1号位
  • Lookahead:Trie 树(前缀树)
  • 关于List.of()
  • 深度对比扣子(Coze) vs n8n
  • PyTorch笔记5----------Autograd、nn库
  • Android Jetpack Compose 状态管理介绍
  • 流程图设计指南|从零到一优化生产流程(附模板)
  • MySQL的使用
  • 斯坦福 CS336 动手大语言模型 Assignment1 BPE Tokenizer TransformerLM
  • 高速路上的 “阳光哨兵”:分布式光伏监控系统守护能源高效运转