问题是事件监听器和“total”都存在于同一范围内(init())
事件函数始终会在 init() 范围内引用总计,即使在声明事件函数后发生更改也是如此
为了解决这个问题,事件函数需要在其自己的范围内有一个不会改变的“总计”。您可以使用匿名函数添加另一层作用域
例如:
(function (total) {
div1.addEventListener('click', function(event) { helper(event, total); }, false);
}(total));
total += 4;
(function (total) {
div2.addEventListener('click', function(event) { helper(event, total); }, false);
}(total));
匿名函数将 init() 的当前“总计”值作为参数传递。这会为匿名函数的作用域设置另一个“总计”,因此 init() 的总计是否更改并不重要,因为事件函数将首先引用匿名函数的作用域。
Edit:
另外,您需要在辅助函数的右大括号后面放置一个分号,否则脚本会抱怨“事件”未定义。
var helper = function(event, id)
{
if (event.stopPropagation) event.stopPropagation();
if (event.preventDefault) event.preventDefault();
alert('id='+id);
};