和function不同之處
src/core/instance/state.js的Vue.prototype.$watch方法中
有三個參數
expOrFn: string | Function,
cb: any,
options?: Object
cb是watch對象中"$route"對象指定的回調函數,此處使用箭頭函數
watch: {
‘$route’: ()=>{ console.log(this) }
}
if (options.immediate) {
try {
cb.call(vm, watcher.value)
} catch (error) {
handleError(error, vm, `callback for immediate watcher "${watcher.expression}"`)
}
}
看這句👉 cb.call(vm, watcher.value)
call的時候是帶着this指向vm去的,正常的function內會指向這個對象,
但箭頭函數是存在於他定義時的環境(他所處的宿主對象),由於定義時還未綁定到vm對象,故此時(瀏覽器中)指向Windows對象。
總之,就是箭頭函數的this指向引起的錯亂,達不到預期