Vue的事件绑定与原生js的事件绑定区别

发布于 2022-09-13 00:46:53 字数 643 浏览 16 评论 0

Vue事件绑定和原生js事件绑定,在针对绑定函数是否加括号的处理上为什么会不同?是Vue源码上对事件绑定进行了封装处理造成的么?下面是我理解的4种情况。

function funa(a) {
  alert(a)
}
  1. Vue事件绑定函数不加括号@click="funa",
    结果:alert会触发,a为event事件对象.

  1. Vue事件绑定函数加括号@click="funa()",
    结果:alert会触发,a为undefined;
    若@click="funa('字符串变量')",
    结果:alert会触发,a为字符串变量.

  1. 原生js事件绑定函数不加括号οnclick="funa",
    结果:alert不会触发 因为这种写法相当于把funa的引用对象赋值给onclick,是不是funa方法或者funa方法的执行赋值给onclick

  1. 原生js事件绑定函数加括号οnclick="funa()",
    结果:alert会触发,a为undefined; 因为这种写法相当于funa方法的执行赋值给onclick

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼中杀气 2022-09-20 00:46:53

在js中为元素绑定事件是不需要加括号运行的(除非这是一个高级函数,返回另一个函数,而你需要绑定的是返回的函数),因为函数运行的优先级高于绑定,所以加括号运行,绑定的其实是函数运行的结果

dom.onclick = fn

而在html中为元素绑定事件需要加括号,因为在html中绑定的事件触发时,是把后面引号内的代码整体拿出来跑,如果没有加引号就不会运行,类似下面这样

<div onclick="fn(event)"></div>
//相当于
dom.onclick = function(event){
    fn(event)
}

在vue中其实和在html中绑定很相似,只是多了一种优化,就是引号内可以是一个函数名,比如函数内的内容为xxx,如果xxx是一个函数名或一个函数表达式,那么直接返回函数进行事件绑定,如果是js代码快,那么会进行函数封装

eval("function($event){" + (handler.value) + "}")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文