为什么javascript中的事件监听器中穿的是方法名而不是,方法名+()?

那么到底在使用一个函数时需不需要加上()呢?
函数只要是要调用它进行执行的,都必须加括号。此时,函数实际上等于函数的返回值或者执行效果,当然,有些没有返回值,但已经执行了函数体内的行为,就是说,加括号的,就代表将会执行函数体代码。
不加括号的,都是把函数名称作为函数的指针,一个函数的名称就是这个函数的指针,此时不是得到函数的结果,因为不会运行函数体代码。它只是传递了函数体所在的地址位置,在需要的时候好找到函数体去执行。

参考这位老哥的对于方法名加不加括号的理解

也就是说**公式:element.addEventListener(event, function, useCapture)**中的function是要写的函数名.当触发监听事件的时候,通过函数名来定位到这个函数再执行.如果说加了括号的话,我自己测试了一下,页面一加载好函数直接调用了(并没有监听到事件).

下面代码就是我看到后没理解的地方,如果参照上面的理解,就不能理解下面的代码实例.我以前一直认为下面那个代码应该监听不到事件,就会在页面加载好后直接执行,后来做了一些测试发现是自己理解有问题

window.addEventListener("resize", function(){
    document.getElementById("demo").innerHTML = sometext;
});

其实这里面的方法传递的是一个函数表达式,也是一个匿名函数.函数表达式并不会直接执行,不像方法名+()一样会直接执行.就像这里的第二个参数一样,这里只不过是声明了一个匿名函数,并没有调用这个函数

下面通过一个例子可以加深对此理解
例子:

<script>
    var x =function () {
        return 5;
    }
    console.log(x);
    console.log(typeof x);
    console.log(typeof x());
</script>
//function x()
//function 
//number

正如这边的例子写的一样,匿名函数的类型是function.
函数名+()后这个类型就不是funtionl了,表示调用了这个函数.
正如公式里面要求传递的参数一样,只要是符合function类型的都是可以往里面传的.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值