在JavaScript中,全局作用域中创建的常量存储在哪里?

9 浏览
0 Comments

在JavaScript中,全局作用域中创建的常量存储在哪里?

在JavaScript中,全局作用域中创建的常量存储在哪里?

例如,如果我使用var var_example = '123'创建一个变量,我可以通过window.var_example来访问它。

然而,如果我使用const const_example = '456'创建一个const变量,那么如何访问它呢?

我需要在函数中创建一个不可变/只读的全局变量。

我可以使用window.in_function_var = 'global variable'在函数中创建一个普通的全局变量,但我不知道如何在函数中创建一个常量/不可变/只读的全局变量;我觉得可以通过访问一个包含常量的作用域,并在其中添加所需的变量来实现这一点。

0
0 Comments

在JavaScript中,常量是指不可更改的值。然而,在全局作用域中创建常量时,常量的存储位置可能会导致一些问题。这可能会导致无法实现真正的常量,并且可能会在尝试更改常量时引发错误。

解决这个问题的一种方法是尝试为window对象定义一个不可变属性。但是这并不等同于常量,虽然无法更改它,但在尝试更改时不会出现相同的错误。

下面是一个示例代码,演示了如何在全局作用域中创建常量以及可能出现的问题和错误:

"use strict"
const CONST1 = 1;
function setGlobalConst() {
  Object.defineProperty(window, "CONST2", {
      enumerable: false,
      configurable: false,
      writable: false,
      value: 2
  });
};
setGlobalConst();
console.log("CONST1: " + CONST1);
console.log("CONST2: " + CONST2);
// 尽管没有错误,但并未真正实现常量
CONST2 = 3;
// 尝试更改常量,将会引发错误
CONST1 = 2;

在上面的代码中,我们首先在全局作用域中定义了两个常量CONST1和CONST2。然后,通过setGlobalConst函数将CONST2添加为window对象的一个不可变属性。在控制台输出CONST1和CONST2的值后,我们尝试将CONST2的值更改为3,结果虽然没有错误,但并未真正实现常量的不可更改性。最后,我们尝试将CONST1的值更改为2,这将引发一个错误,因为使用const关键字创建的常量是不可更改的。

因此,尽管我们可以通过一些技巧在全局作用域中创建类似常量的属性,但在JavaScript中实现真正的常量仍然是一个挑战。

0
0 Comments

在JavaScript中,使用constlet声明的变量不会定义在全局作用域的window对象中,这是因为规范是这样规定的。

如果想要将变量添加到window对象中,可以使用Object.defineProperty()方法。这个方法会将属性添加到window对象中,并将writable: falseconfigurable: false设置为默认值。

严格模式下,如果尝试更新或删除这个属性,会抛出错误。

如果想重定义一个函数变量,可以将value设置为该函数,例如:Object.defineProperty(window, "example_var", { value: function example_var() { ... } })

0