var是函数作用域且存在变量提升,let/const是块级作用域并有暂时性死区;推荐优先使用const声明常量、let声明可变变量,避免var导致的作用域污染。

关键在于控制作用域——变量只在真正需要它的地方存在,不向外泄漏。
优先用 let 和 const 替代 var
var 有变量提升和函数作用域的特性,即使写在 if 或 for 里,只要不在函数内,仍会挂到全局(比如 window.globalLeak)。而 let 和 const 是块级作用域,超出 {} 就不可访问,天然防污染。
- 声明配置、URL、常量时,统一用 const,例如:
const API_URL = 'https://api.example.com' - 需要重新赋值的局部状态,用 let,例如循环计数、临时结果
- 完全避免在顶层或条件块中使用 var
函数包裹是最轻量的隔离手段
把逻辑包进函数里,内部变量就自动变成局部变量。哪怕只是执行一次,也比裸奔安全得多。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 直接写
(function(){ let data = []; console.log(data); })();,data 就不会跑到 window 上 - 如果需要对外暴露少量接口,显式挂载到 window 或返回对象,而不是默认全公开
- 老项目升级时,可逐个脚本加一层立即执行函数,成本低、见效快
用命名空间对象收敛全局入口
如果确实要跨模块共享,不要放一堆零散变量,而是只定义一个全局对象,其余都作为它的属性。
- 例如:
const MyApp = {}; MyApp.config = { theme: 'dark' }; - 配合命名空间工具函数,支持点号路径:
MyApp.namespace('utils.date');,生成MyApp.utils.date - 这样既保留了可访问性,又把污染从“几十个名字”压缩成“一个名字”
模块化是现代项目的首选防线
ES6 的 import/export 不仅语义清晰,还能让构建工具做静态分析和 tree-shaking,从根本上切断隐式依赖。
- 把常量、工具函数、API 配置分别抽成
constants.js、helpers.js、api.js - 在使用处明确
import { API_BASE_URL } from './constants.js',谁用了、用什么一目了然 - 第三方库尽量走
import $ from 'jquery',而非 script 标签引入后靠 window.$ 访问
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










