当前位置: 首页 > news >正文

JavaScript:函数应用的几个细节问题

一、以函数调用的形式进行赋值操作的情况

比如:

ele.onclick = HTML();

先看一下具体的代码情况,如下

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>W3Cschool教程(w3cschool.cn)</title>
</head><body><h1 id='h1'>1</h1><h1 id='h2'>2</h1><h1 id='h3'>3</h1><script>function csHTML(ele) {console.log(ele.innerHTML);}function HTML() {// console.log(this.innerHTML);console.log('123');}var h1coll = document.getElementsByTagName('h1');for (var i = 0; i < h1coll.length; i++) {var ele = h1coll[i];//一个错误的示范  这样叫方法调用HTML()ele.onclick = HTML();// ele.onclick = function() {//     console.log(this.innerHTML);// }}</script>
</body></html>

运行结果如下:

image

核心错误:ele.onclick = HTML()

 
这是这段代码最关键的错误。
 
  • HTML()函数调用,代码执行到这一行时会立刻执行HTML()函数,并把函数的返回值(这里是undefined)赋值给ele.onclick
  • 这意味着:页面加载时就会打印 3 次123,而点击<h1>元素时不会有任何反应(因为onclick被赋值成了undefined)。
  • 正确的事件绑定方式是:ele.onclick = HTML; 
  • <!DOCTYPE html>
    <html><head><meta charset="utf-8"><title>W3Cschool教程(w3cschool.cn)</title>
    </head><body><h1 id='h1'>1</h1><h1 id='h2'>2</h1><h1 id='h3'>3</h1><script>function csHTML(ele) {console.log(ele.innerHTML);}function HTML() {console.log(this.innerHTML);// console.log('123');}var h1coll = document.getElementsByTagName('h1');for (var i = 0; i < h1coll.length; i++) {var ele = h1coll[i];//这才是正确的方式ele.onclick = HTML;// ele.onclick = function() {//     console.log(this.innerHTML);// }}</script>
    </body></html>

运行结果如下:

image

鼠标点击左侧对应的1-2-3数字,右侧的控制台就会输出相应的点击对象的值;

  • 函数引用 vs 函数调用
    • ele.onclick = HTML:把HTML函数本身赋值给onclick事件,点击元素时才会执行这个函数(这是事件绑定的正确方式)。
    • ele.onclick = HTML():立刻执行HTML()函数,把返回值(undefined)赋值给onclick,点击元素无反应。
     
  • this 的指向:在事件处理函数中,this默认指向触发事件的 DOM 元素(这里就是被点击的<h1>),所以this.innerHTML能拿到<h1>里的内容(1/2/3)。

二、匿名函数进行赋值的情况

继续将上述代码稍微改造一下,如下:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>W3Cschool教程(w3cschool.cn)</title>
</head><body><h1 id='h1'>1</h1><h1 id='h2'>2</h1><h1 id='h3'>3</h1><script>function csHTML(ele) {console.log(ele.innerHTML);}function HTML() {console.log(this.innerHTML);// console.log('123');}var h1coll = document.getElementsByTagName('h1');for (var i = 0; i < h1coll.length; i++) {var ele = h1coll[i];//这才是正确的方式// ele.onclick = HTML;ele.onclick = function() {console.log(123456);}}</script>
</body></html>

运行结果如下:

image

点击左侧数字,右侧控制台就会输出123456,多次点击就会计数,如上所示,共点击了四次;

 

http://www.jsqmd.com/news/293653/

相关文章:

  • 分析河南值得购买的实验室测油仪,性价比高的是哪家?
  • 基于设备特征的响应式 UI 构建:Flutter for OpenHarmony 中的智能布局实践
  • 开学季购机推荐,荣耀手机怎么样?哪几款值得推荐?
  • 继续堆 Prompt,真的不如早点学 Skill
  • RAG-索引构建
  • Spring AI 支持 Agent 人机交互:让 AI 先问清楚再行动
  • AI大模型:程序员的2026新机遇窗口【建议收藏】
  • 个人介绍(mjhcsp)
  • 2026缠膜机行业佼佼者:哪些公司值得你选择,无人化缠绕包装机/套膜包装机/自动绕膜机,缠膜机联系方式怎么选择
  • 视频制作优选方案:2026年4A公司口碑推荐实战指南,视频制作大型公司优选实力品牌
  • 2026优质油水分离器厂家推荐:行业领先品牌盘点
  • 信创环境下,网页文件上传下载有哪些推荐的解决方案?
  • 国企项目网页开发,文件上传下载有哪些实用的解决方案?
  • 国防军工网页项目,如何选择文件上传下载的解决方案?
  • JS截屏内容粘贴到CKEDITOR为何无法生成高清图?
  • 2026年性价比高的演出服厂家,广东汇杰服饰是成人演出服优质生产商
  • CKEDITOR前端粘贴图片如何触发PHP后台自动转存?
  • 2025年广东省职业院校技能大赛高职组“区块链技术应用”竞赛试题(二) - 实践
  • 防水施工公司选哪家好,上海大友建设集团性价比高排前十
  • 跨平台CKEDITOR插件如何实现图片粘贴即传PHP服务器?
  • 2025年市面上评价高的非标设备机架公司推荐,非标设备机架怎么选择技术领航者深度解析
  • 基于MPPT和PI控制器的光伏蓄电池微电网能量管理系统simulink建模与仿真
  • 规范驱动研发的几点思考
  • 2026年值得关注的油脂分离器厂家推荐
  • 2026进口油脂分离器品牌推荐及行业应用参考
  • 2026商业广场线性排水沟推荐:选型要点与高效方案解析
  • 2026市政道路树脂线性排水沟推荐及选型参考
  • 接口通讯学习(day06):串行通信核心标准深度解析:UART、RS-232、RS-422与RS-485 - 指南
  • 【品牌出海】店铺乱得像“杂货铺”?揭秘 AI 如何批量统一图片风格,3 秒打造国际大牌感!
  • 使用conda创建的虚拟环境在哪个文件下