gpt4 book ai didi

typescript - 为什么函数表达式和函数声明对一个变量的推断结果不同?

转载 作者:行者123 更新时间:2023-12-05 02:37:28 24 4
gpt4 key购买 nike

我有一个变量和三个函数:

const a: string | number = 3

function b(){
console.log(a) // string | number
}
const c = function (){
console.log(a) // number
}
const d = () => {
console.log(a) // number
}

当我在函数 b 中悬停单词 a 时,我得到的是 string |编号;

当我在函数 c 中悬停单词 a 时,我得到的是 number;

当我在函数 d 中将单词 a 悬停时,我得到的是 number

但是 a 不是常量吗?在第一次被赋值为 3 后,a 被推断为 number 类型。为什么在函数b中它还有机会变成string类型?

最佳答案

我相信这是因为函数提升。理论上,b 可以在 a 明确赋值之前被调用:

b(); // <=====
const a: string | number = 3

function b(){
console.log(a) // string | number
}
const c = function (){
console.log(a) // number
}
const d = () => {
console.log(a) // number
}

cd 都不能从那里调用,直到 after a 才分配它们绝对分配。

从运行时的角度来看,当尝试访问 a 时,对 b 的调用会抛出异常,因为 a 会处于临时死区,但从类型的角度来看,在 TypeScript 知道它是一个 number 之前。

关于typescript - 为什么函数表达式和函数声明对一个变量的推断结果不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69971761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com