cleanTimeout没有起作用

问题: vue项目中这是一个立即执行版本的防抖函数,
但是为什么注释处打印出来的timeout不是undefined或者 null,
也就是说cleanTimeout好像没有起作用,求教

  debounce(fn: any, wait: number) {
    let timeout: any;
    return function (this: any) {
      let self = this
      let arg = arguments
      console.log(timeout)
      if (timeout) {
        console.log('haha')
        clearTimeout(timeout)
        console.log(timeout)   //  这个地方有问题 
      }
      console.log(timeout)
      let callnow = !timeout
      timeout = setTimeout(() => {
        timeout = null
      }, wait);
      if (callnow) fn.apply(self, arg);
    };
  }

clearTimeout 并不能清除timeout变量的的值

  if (timeout) {
        console.log('haha')
        clearTimeout(timeout)
        console.log(timeout)   //  这个地方有问题 
      }

这里if是不是可以理解成 : 如果这个定时器timeout存在,就进入if中,那么就会清除定时器timeout。
那么打印出timeout应该就是打印定时器本身啊,怎么会和值有关系?求深入讲解

timeout的值 本身类似于一个js当前运行环境的一个定时器的识别码,在执行clearTimeout的时候会根据timeout的值进行查找这个定时器,查找到的话会阻止并销魂这个定时器。但是这个timeout只是Js环境下的一个变量,并不会随定时器的清除而把变量清除掉

这里写的没有特别严谨
clearTimeout(timeout)

建议在后面加上
timeout = null