这是我今天偶然写代码,发现的。原因是我在这个组件中写了一定时器,然后判断是否有无定时器,有则清除定时器,无则添加定时器。然后发现了Vue2 变量写在data中与写在export default之外的区别。
<script>
var timer1;
export default {
data(){
return {
timer2:null,
}
}
}
</script>
区别1:响应式(这个大家都想得到)
- timer1 是不具备响应式的,因为他并没有被进行数据劫持,
- timer2被数据劫持,因此他具有响应式
区别2:组件唯一性
- timer1具有组件唯一性,也就是说,你引用了n个这个组件,timer1是唯一的。这样的话,这个变量可以作为一种状态管理的存在,且外部不能直接访问。需要组件内部进行暴露get set方法。
- timer2不具备组件唯一性,每次新使用一个组件,timer2都是一个新的独立的。