JavaScript函数作用域:为何能给未命名元素绑定事件处理程序?
为什么没设id/name也能给div绑定onclick事件?
你不需要依赖id或name来绑定事件——DOM元素本身就是JavaScript对象,直接通过对象引用就能把事件处理程序和元素关联起来,这就是代码生效的核心原因,具体拆解如下:
直接持有DOM元素的引用
每次调用makeElement函数时,document.createElement("div")会返回一个全新的DOM元素对象,变量el直接指向这个对象。你给el.onclick赋值事件处理函数,本质是直接在这个具体的元素对象上挂载事件逻辑,完全不需要id/name这类“查找标识”。闭包保证每个事件对应正确的元素
事件处理函数里引用了外层的el变量,而JavaScript的函数调用会形成独立的闭包:每次调用makeElement,都会生成一个专属的闭包环境,其中的el指向本次调用创建的那个div。所以点击不同的div时,事件函数里的el都是对应自己的那个元素,不会搞混。
举个直观的例子:
- 调用
makeElement("test1")时,el指向“test1”这个div,绑定的点击函数会修改这个div的内容; - 调用
makeElement("test2")时,又生成一个新的el指向“test2”div,对应的点击函数只会操作这个div。
简单说:id/name是用来查找元素的工具,而你这里已经直接拿到了元素的“一手引用”,自然可以直接绑定事件。
内容的提问来源于stack exchange,提问作者jsm
相关产品推荐
相关产品推荐

