Vue的事件绑定与原生js的事件绑定区别
Vue事件绑定和原生js事件绑定,在针对绑定函数是否加括号的处理上为什么会不同?是Vue源码上对事件绑定进行了封装处理造成的么?下面是我理解的4种情况。
function funa(a) {
alert(a)
}
- Vue事件绑定函数不加括号@click="funa",
结果:alert会触发,a为event事件对象.
- Vue事件绑定函数加括号@click="funa()",
结果:alert会触发,a为undefined;
若@click="funa('字符串变量')",
结果:alert会触发,a为字符串变量.
- 原生js事件绑定函数不加括号οnclick="funa",
结果:alert不会触发 因为这种写法相当于把funa的引用对象赋值给onclick,是不是funa方法或者funa方法的执行赋值给onclick
- 原生js事件绑定函数加括号οnclick="funa()",
结果:alert会触发,a为undefined; 因为这种写法相当于funa方法的执行赋值给onclick
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在js中为元素绑定事件是不需要加括号运行的(除非这是一个高级函数,返回另一个函数,而你需要绑定的是返回的函数),因为函数运行的优先级高于绑定,所以加括号运行,绑定的其实是函数运行的结果
而在html中为元素绑定事件需要加括号,因为在html中绑定的事件触发时,是把后面引号内的代码整体拿出来跑,如果没有加引号就不会运行,类似下面这样
在vue中其实和在html中绑定很相似,只是多了一种优化,就是引号内可以是一个函数名,比如函数内的内容为xxx,如果xxx是一个函数名或一个函数表达式,那么直接返回函数进行事件绑定,如果是js代码快,那么会进行函数封装