核心在于缩短作用域链查找路径:局部变量访问快于全局变量,应缓存全局对象、在函数内声明常量、避免隐式全局、启用严格模式,并用iife或es模块封装作用域。

核心在于缩短作用域链查找路径。JavaScript 引擎访问变量时,会从当前作用域开始,逐级向上查找,直到全局作用域。全局变量位于作用域链最顶端,每次访问都要遍历整条链,而局部变量一步到位。
缓存高频使用的全局对象
像 document、window、console 这类对象在函数中被反复调用时,应提前赋值给局部变量:
- 优化前:循环中每次调用
document.createElement,引擎都要重新定位document - 优化后:在函数开头写
const doc = document;,后续全部使用doc.createElement - 同理可缓存
doc.body、doc.getElementById等常用引用,避免重复属性解析
把配置或常量声明在函数作用域内
不要把接口地址、默认参数、枚举值等直接挂在 window 或顶层作用域:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 反例:
window.API_BASE = 'https://api.example.com';,后续所有函数都去读它 - 正例:在需要的模块或函数内定义
const API_BASE = 'https://api.example.com'; - 配合 ES 模块,用
export const替代var声明,既隔离作用域又支持 tree-shaking
避免隐式全局变量
漏写 let、const 或 var 会导致变量自动挂到全局对象上:
- 例如
myData = [1,2,3];实际等价于window.myData = [1,2,3]; - 这类变量不仅查找慢,还可能被其他脚本意外覆盖或修改
- 开启严格模式(
'use strict';)可让此类错误直接抛出,强制规范声明
用 IIFE 或模块封装顶层逻辑
将初始化代码包裹在立即执行函数中,天然创建私有作用域:
- 旧写法:
var config = {...}; init();——config是全局的 - 新写法:
(function() { const config = {...}; init(config); })();——config仅在函数内有效 - 现代项目优先使用
import/export,每个模块默认自带作用域边界
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










