模板字面量内无法识别导入的createTasks函数问题咨询
问题原因解析
ES模块的作用域隔离:你通过
import导入的createTasks属于ES模块作用域内的函数,默认不会挂载到全局window对象上。但onclick属性中的代码、setAttribute传入的字符串回调,最终都会在全局作用域下执行,自然找不到仅存在于模块作用域里的createTasks。模板字面量的onclick本质是字符串解析:当你在模板里写
<button onclick="createTasks()">,浏览器解析这段HTML字符串时,会把onclick的值当成全局代码片段执行。由于模块内的函数没暴露到全局,执行时就会抛出引用错误。setAttribute绑定的同理问题:用
setAttribute('onclick', 'createTasks()')和上述情况逻辑一致,本质是给元素的onclick属性赋值字符串,浏览器后续执行这段字符串时还是去全局查找函数,所以同样报错。事件监听器的正确逻辑:先把HTML添加到DOM,再用
addEventListener绑定事件时,你是直接把模块内的createTasks函数引用传递给监听器——这个过程在模块作用域内完成,不需要依赖全局作用域,因此函数能被正确识别和调用。
内容的提问来源于stack exchange,提问作者Pranjal Ruhela
相关产品推荐
相关产品推荐

