在模板中,我们可以进行两种形式的事件绑定:
直接绑定一个函数:
<template><div @click="clickHandler"></div></template>
绑定
**javascript**语句:<template><div @click="clickHandler()"></div></template>
其实,这两种绑定事件的方式编译后形成的模板是不一样的:
第一种方式是直接将指定的函数作为事件处理程序:on: {click: vm.clickHandler}
所以在这种情况下,
**clickHandler**收到的第一个参数实际上是浏览器事件对象。
第二种方式,事件处理程序其实是Vue自身创建的。并且有一个形式参数:$event.on: {click: function($event) {vm.clickHandler();}
那么,在
clickHandler处理程序中,我们能不能使用$event变量呢?显然是不能的。
在这里,我暴露出了一个严重的问题,那就是我之前将函数执行栈和函数的作用域链混为一谈了。
函数执行栈确实是**点击事件处理程序**=>**clickHanlder**。但是**clickHanlder**的作用域链并不是这样,它是在这个函数生成的位置生成的。后续我会整理专门分析。作为一个两年工作经验的前端,我居然没有理清这个问题,实在是很不应该。
