gpt4 book ai didi

javascript - 不能声明或修改变量

转载 作者:可可西里 更新时间:2023-11-01 02:53:28 24 4
gpt4 key购买 nike

我有一个关于 JavaScript 的问题。当我声明新变量并为其分配类的新实例时,如果抛出错误,变量将变得完全无法使用。

下面的代码应该会抛出一个错误

class MyClass {


constructor (config) {

this.someProperty = config.someProperty || '';

}


}

let myClassInstance = new MyClass();

如果我试图给它赋值,JavaScript 会抛出一个错误。

myClassInstance = '123'

Uncaught ReferenceError: myClassInstance is not defined

然后我尝试定义变量

让 myClassInstance = '123'

Uncaught SyntaxError: Identifier 'myClassInstance' has already been declared

变量也不能被删除。有什么我们可以解决这个问题的吗?我只是好奇,当然我会处理将 undefined 作为配置传递给构造函数。

编辑:我也尝试过使用 var,然后我可以重用 myClassInstance。我想知道为什么如果我使用 let 那个变量不能被删除、声明或者新值不能被重新分配。

编辑 2:我可以处理传递未定义或传递空对象。纯粹出于好奇在 JS 控制台中使用该变量会发生什么,如果您一次粘贴所有内容,代码也不会执行

最佳答案

在交互式控制台中运行代码会造成在典型代码执行中不会发生的人为情况。

首先,您所看到的并不是特定于类构造函数中抛出的错误。如果您在 RHS 抛出错误的地方执行任何 let 语句,您可以观察到相同的行为:

let myVariable = "".boom();

documentation on MDN讨论了一个“临时死区”,其中使用 let 声明的变量存在,但在 let 语句成功执行之前被视为不存在。

来自 ES6 规范:

The variables are created when their containing Lexical Environment is instantiated but may not be accessed in any way until the variable’s LexicalBinding is evaluated.

简单来说,变量已创建,但无法访问,因为其“LexicalBinding”尚未计算。

使用控制台,您创建了一种情况:

  • let 语句未成功执行(因此尝试访问其变量是一个ReferenceError)。
  • 您有两个 let 用于同一范围内的同一变量名(因此第二个会产生语法错误)。 (n.b. 在同一范围内简单地使用两个 let 会导致代码在编译阶段失败,如果您在第一个甚至有机会尝试执行之前没有在控制台中一次一点地输入代码)。

这是普通代码不可能出现的情况。

通常情况下,您将无法在抛出错误的范围内继续运行语句,因此第一个项目符号是不可能的。控制台允许您这样做。

在一般情况下,这是不可能的,因为代码会在编译阶段失败,甚至在第一个 let 语句尝试运行之前。

这就是为什么您在这两种情况下都会出错。

关于javascript - 不能声明或修改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42809646/

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