鍍金池/ 問答/HTML5  Python  HTML/ 一點關于學習Vue.nextTick產(chǎn)生的疑問

一點關于學習Vue.nextTick產(chǎn)生的疑問

var vm = new Vue({
    el: '#example',
    data: {
        message: '123'
    }
})

vm.message = 'new message'

console.log(vm.$el.textContent)

Vue.nextTick(function () {

    console.log(vm.$el.textContent)

})

在網(wǎng)上看了一些Vue.nextTick的說明,說是在下一個任務循環(huán)時(即DOM更新完畢后)進行操作,

clipboard.png

以上代碼打印出來是這個效果,的確是不一樣的,

但是如果把代碼改成

    var vm = new Vue({
        el: '#example',
        data: {
            message: '123'
        }
    })

    vm.message = 'new message'

    console.log(vm)
    // console.log(vm.$el)

    Vue.nextTick(function () {

        console.log(vm)
        // console.log(vm.$el)

    })

打印vm.$el 或者只打印vm的時候,在Chrome中開發(fā)者工具查看的時候里面的textContent就一樣了

上面的:

clipboard.png

下面的:

clipboard.png

這是為什么呢?

回答
編輯回答
乞許

因為vm是一個 Object的引用 類型數(shù)據(jù)啊,vm指向的只是一個地址引用而已,實際數(shù)據(jù)都存放在堆中。

如果你的點擊查看速度快過 機器運行,那么你是可以看到你想看的結果的。
實際上,你點擊查看的時候,根據(jù)引用指向,值早就變了啊

2018年3月4日 20:09
編輯回答
心悲涼

在你使用chrome控制臺查看的時候,點開屬性的時候,Chrome才會去查詢那個值的屬性,你不信的話可以JSON.stringify(vm) 轉(zhuǎn)成JSON字符串再看

2018年1月16日 21:36
編輯回答
九年囚

控制臺打印出來的是引用, vm 一直都是同一個對象, 所以你展開看到的內(nèi)容是一樣的. 你可以在第一個 log 語句打個斷點 console.log(vm); debugger; 查看此時 vm 打印出來的值.

2018年3月19日 18:52