注释掉引用数组的var声明会改变行为。为什么?

时间:2013-06-26 23:56:41

标签: javascript

我有以下java脚本代码段

    <script>
    var editables = document.getElementsByClassName("canEdit");
    function editHandler(el) {
        return function() {
            window.alert(el.textContent);
        }
    }
    for (var i = 0; i < editables.length; i++) { 
        var el = editables[i];
        el.onclick = editHandler(editables[i]);
    }
    </script>

如果我注释掉var el = editables[i];行,那么当我点击可编辑元素时,警报就不会再弹出。为什么会这样?

2 个答案:

答案 0 :(得分:2)

该行定义el。没有它,就没有附加onclick处理程序的元素。如果你没有在那里收到引用错误,那么必须有一些(可能是全局的,如果你的代码片段是准确的)变量名为el,已经在代码中的其他地方定义了。

答案 1 :(得分:2)

  

为什么会这样?

因为您使用el来绑定事件处理程序。如果您注释掉该行

var el = editables[i];

然后变量el将不存在且

el.onclick = editHandler(editables[i]);

将引发引用错误,因为您尝试访问不存在的变量的.onclick属性。 事件处理程序永远不会绑定。

您可以改为使用editables[i]

editables[i].onclick = editHandler(editables[i]);