减少作用域链查找层级能直接加快变量访问速度,因引擎需逐级向上搜索变量,深层级增加耗时,尤其在高频代码中更显著;应将常用变量缓存在最近作用域,如用const缓存window.API_URL或config.basePath。

减少作用域链查找层级能直接加快变量访问速度,因为 JavaScript 引擎每次读取变量时,会从当前作用域开始,逐级向上(函数→外层函数→全局)搜索,层级越深,耗时越长。尤其在高频执行的代码(如循环体、事件回调)中,这种开销会被显著放大。
把变量提前声明在最近的作用域
避免让引擎“爬楼梯”找变量。比如在函数内反复用到某个对象属性或全局配置,就不要每次都写 window.API_URL 或 config.basePath,而是在函数开头用 const 缓存:
-
不推荐:
for (let i = 0; i -
推荐:
const { debug } = window.appConfig; for (let i = 0; i
优先使用字面量和局部常量
字面量(如 { a: 1 }、[1,2,3])创建快,且存储在栈中,访问路径短;而 new Object() 或 new Array() 需调用构造函数、分配堆内存,还可能触发额外作用域查找(如构造函数内部的 this 绑定)。同理,把不变的值提为 const 局部变量,比重复计算表达式更高效:
- 用
const len = arr.length替代循环中每次写arr.length - 用
const now = Date.now()替代多次调用Date.now()
避免隐式全局与未声明变量
不加 let/const 直接赋值(如 count = 1),会在严格模式下报错,非严格模式则挂到全局对象上——这不仅延长了所有后续变量查找的作用域链,还导致内存无法及时回收。启用 "use strict" 是最轻量的防御手段:
立即学习“Java免费学习笔记(深入)”;
- 强制显式声明,杜绝意外创建全局变量
- 让引擎更容易做静态分析和优化
- 配合 ESLint 等工具可提前发现潜在问题
模块化隔离作用域
ES6 模块天然形成独立作用域,import 的变量不会污染全局,且现代打包器(如 Vite、Webpack)能做 tree-shaking 和作用域提升(hoisting optimization)。相比传统 IIFE 或命名空间对象,模块更简洁、更易维护,也更利于引擎做内联和常量折叠:
- 导出配置:
export const TIMEOUT = 5000; - 导入使用:
import { TIMEOUT } from './constants.js'; - 引擎知道该值不可变,可能直接内联为字面量


















