Why does the TDZ (Temporal Dead Zone) become ineffective in Vue ?

TDZ means that you cannot access a variable before it has been initialized. However, in Vue script setup sugar, it is possible to access variables before initialization. Why does this happen? Is it due to scope promotion?

enter image description here

I tried in plain js and setup function, message cannot be accessed before initialization

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.4.8/vue.global.min.js"></script>
<script setup>
  console.log(message)
  const message = "hello vue setup"
</script>
<template>
  <div class="app">
    App
  </div>
</template>
<style lang="less" scoped>
</style>