4

在对 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 规范中的附件 C (假设这是正确的文档),并且没有发现在严格模式下限制变量类型的内容。

我是否在这里遗漏或误解了某些内容,或者问题是否存在缺陷或可能具有误导性?

4

2 回答 2

3

没有上下文,这个问题就不清楚了。“变量”是什么意思,“类型”是什么意思?

它们可以指代任何东西,尽管通常我们将该短语理解为“变量(当前)持有的值的类型”的缩写,(尽管“类型”本身是模棱两可的,意思是 Type 或typeof) - 和当然,大多数变量都可以改变它们的值和类型。
它可能引用了变量本身的属性——例如它的可变性、绑定的类型、存储它的范围(记录)——这些通常不会改变。

于 2017-03-20T21:41:10.517 回答
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());
于 2017-03-20T19:11:41.583 回答