Skip to content

immediate

javascript
// new Watcher 创建完 user watcher 后判断一下 options.immediate 是否为真,为真就
// 把 cb.call(this, watcher.value),watcher.value 就是 初始值。
Vue.prototype.$watch = function (
  expOrFn: string | (() => any),
  cb: any,
  options?: Record<string, any>
): Function {
  // expOrFn 就是 watch 的 key,即监视的属性。
  // cb 就是 watch 的 handler,即属性变化时的回调。
  const vm: Component = this
  if (isPlainObject(cb)) {
    return createWatcher(vm, expOrFn, cb, options)
  }
  options = options || {}
  // 标识是 user watcher
  options.user = true
  // 通过 Watcher 实现
  const watcher = new Watcher(vm, expOrFn, cb, options)
  if (options.immediate) {
    cb.call(this, watcher.value)
  }
}