在对PluralSight进行关于JavaScript的测验时,我遇到了这个问题:
假设您已启用严格性,是否可以在定义后更改变量的类型?
正确的答案为否。也许我已经理解了这个问题是错误的,但对我而言,这表明以下代码无效:
function test() {
"use strict";
let x = 12; // x is a number
x = "hello world"; // x is now a string
return x;
}
console.log(test());
在Chrome,Firefox和Edge中进行快速测试可以完美地运行上述代码。我还查看了ECMAScript 2016 spec中的附件C(假设这是正确的文档),并且没有提到在严格模式下限制变量类型的问题。
我在这里错过了什么或误解了什么吗?或者这个问题是否存在缺陷或可能具有误导性?
答案 0 :(得分:1)
如果没有背景,问题就不明确了。它们是什么意思"变量"它们是什么意思"键入"?
他们可以引用任何东西,但通常我们理解这个短语是" 变量(当前)拥有的值的类型",(虽然"类型"本身含糊不清,意思是Type或typeof
) - 当然大多数变量都可以改变它们的值和类型。
它可能已经引用了变量本身的属性 - 例如它的可变性,绑定的类型,存储的范围(记录) - 通常不会改变。
答案 1 :(得分:0)
这里x是一个全局变量,在外部函数中它总是返回全局变量值。 您可以在同一范围内使用 let 关键字重新声明变量,但可以在另一个范围内重新声明变量,这可能是严格的,也可能不是
function test() {
"use strict";
let x = 12; // x is a number
//let x = "hello world"; // you can't do like this
return x;
}
let x = "hello world"; // its ok
console.log(test());