本文解析 browserify 打包后 `array.foreach` 报错及 html 内联事件中 `updateendwords is not defined` 的根本原因,指出核心在于作用域隔离、执行时机错误及未正确导出/暴露函数,并提供可立即生效的修复方案。
Browserify 将模块封装在独立作用域中(IIFE),默认不将任何变量暴露到全局 window 对象。这直接导致两个经典问题:
✅ 正确写法(修复两项错误):
// main.js —— Browserify 入口文件
const domready = require('dom-ready');
// ✅ 1. 定义函数(不立即执行)
function UpdateEndwords() {
console.log('Endwords updated');
// 实际逻辑...
}
// ✅ 2. 正确绑定事件:传函数引用,不加括号
domready(() => {
const inputs = document.querySelectorAll('input');
inputs.forEach(input => {
// 注意:事件名是 'change',不是 'onchange'
input.addEventListener('change', UpdateEndwords);
});
});
// ✅ 3. 如需 HTML 内联调用,显式挂载到 window(仅开发/简单场景推荐)
if (typeof window !== 'undefined') {
window.UpdateEndwords = UpdateEndwords;
}⚠️ 关键注意事项:
('change', UpdateEndwords):事件类型字符串为 'change'(无 on 前缀),且传入的是函数引用(无 ());总结:Browserify 的本质是模块化与作用域隔离,而非“自动让一切变全局”。修复的核心逻辑是——显式管理作用域暴露 + 严格区分函数定义与调用 + 确保构建产物实时更新。