javascript - 请看我对这段代码的解释对不对

查看:62
本文介绍了javascript - 请看我对这段代码的解释对不对的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

<button id="btn">按钮</button>

<script>
var e =document.getElementById("btn");
e.addEventListener("click",demo1())   

function demo1(){
alert("hello1")
    }
<script>

这段话的执行结果是:打开网页,立即执行demo1(),然后点击按钮没反应。
我是这么理解的:

因为函数名后面加括号代表立即执行该函数,解释器在解释这句话时,将demo1执行了,而e.addEventListener("click",demo1())因为第二项参数不符合,则成了无效代码,不被执行。

大家看看这么理解对不对呢?


解决方案

"无效代码,不被执行",这半句我觉得可以再深入一点。你在e.addEventListener("click",somename)的时候,第二个参数代表的是变量名。

somename就是一个变量名,你用typeof somename可以得到这个变量的类型,如果它是function,那么click事件发生的时候就会去执行这个函数。

但是现在直接把somename()传进去之后是什么意思呢?意思是把somename()的运行结果作为第二个参数传进去,那么typeof somename()得到的是什么呢?undefined。所以这里就发生了:1.运行函数(发生了alert),得到结果(undefined),将结果作为addEventListener的第二个参数传入;2.click事件发生的时候,执行undefined,所以什么也不发生,当然e.addEventListener("click",undefined)第二个参数为undefined的话,这个绑定动作其实也没有发生,所以你说第二项参数不符合也是OK的。

这篇关于javascript - 请看我对这段代码的解释对不对的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆