我的理解是在静态类型语言的运行时之前“检查”变量类型。
我认为这意味着int类型的int不能是字符串类型?这是否意味着变量类型在整个程序中不能改变(在同一范围内)(采用静态类型语言)?
有人提到“变量阴影”,但我很确定它只适用于不同的范围。
var i = 'hi';
function foo() {
var i = 1;
}
我对var阴影的理解是全局范围中的i
与i
函数范围中的foo
不同,因此它们的类型是永久的且不相关的(在静态中)语言,JS不是)。是吗?
答案 0 :(得分:1)
有人提到"变量阴影"但我很确定这只适用于不同的范围。
这取决于你对"范围"的定义,例如,Rust允许你正在谈论的那种阴影,即使在一个块内:
fn main() {
let a: str = "hello";
let a: i32 = 3;
}
可以认为,影子变量的声明隐含地结束了前一个变量的范围。但引用from the Rust book:
请注意,遮蔽名称不会改变或破坏它所绑定的值,并且该值将继续存在,直到它超出范围,即使它无法通过任何方式访问。