vue中函数到底是如何执行的?

代码:

<template>  
    <textarea v-model="t"></textarea>
</template>
<script>  
    export default {
      data() {
        return {
          t:'',
          a:[]
        }
      },
      watch: {
        t() {
          this.test()
        }
      },
      methods: {
        test() {
          console.log(this.a)
          this.a.push('b')
        }
      }
    }
</script>

当在文本域输入文字后,watch函数执行,触发了test方法,我先console后push,为什么数组a有值?
图片描述

阅读 4.1k
3 个回答

控制台 打印的 console 不是即时的
你将

console.log(this.a)

改为

console.log(JSON.stringify(this.a))

你就能看到 push前的 内容了

这和vue没有关系。
你操作的是一个对象,是通过引用的,即使是先输出再操作输出的也还是操作之后的内容。
比如:

var a = [];
console.log(a)    // Array[1]0: "1"length: 1__proto__: Array[0]
a.push('1')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题