在 JavaScript 中存储的全局范围内创建的常量在哪里?
Posted
技术标签:
【中文标题】在 JavaScript 中存储的全局范围内创建的常量在哪里?【英文标题】:Where are constants created in a global scope stored in JavaScript? 【发布时间】:2020-05-03 03:40:40 【问题描述】:例如,如果我使用var var_example = '123'
创建一个变量,我可以通过window.var_example
访问它。
但是,如果我使用 const const_example = '456'
创建一个 const 变量,那么我该如何访问它?
我需要它来在函数中创建一个不可变/只读全局变量。
我可以使用window.in_function_var = 'global variable'
在函数中创建一个普通的全局变量,但是我不知道如何在函数中创建一个常量/不可变/只读全局变量;在我看来,这可以通过访问带有常量的范围并在那里添加所需的变量来完成。
【问题讨论】:
关于如何访问const
变量 - 您可以照常进行;在其范围内按名称。这似乎是一个 X/Y 问题。您要解决的实际问题是什么?
【参考方案1】:
使用const
和let
声明的变量未在窗口because the specification says so 上定义。
您可以使用Object.defineProperty()
将属性添加到窗口对象。这将默认设置writable: false
和configurable: false
Object.defineProperty(window, "in_function_var",
value: 'global variable'
)
console.log(in_function_var)
in_function_var = "updated"
console.log(in_function_var)
delete window.in_function_var
console.log(in_function_var)
在严格模式下,如果您尝试更新或删除属性,则会引发错误:
"use strict"
Object.defineProperty(window, "global_var",
value: 'global variable'
)
try
global_var = "updated"
catch (e)
console.error(e)
try
delete window.global_var
catch (e)
console.error(e)
【讨论】:
谢谢,这两个答案都有很大帮助。我想澄清一下我是否可以用这种方法重新定义一个函数变量。当使用函数 example_var() 声明变量时,defineProperty 不能重新定义 example_var。 @sopafoy 只需将value
设置为该函数函数:Object.defineProperty(window, "example_var", value: function example_var() ... )
【参考方案2】:
您可以尝试为 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);
// no have error but not mutted
CONST2 = 3;
// error
CONST1 = 2;
【讨论】:
以上是关于在 JavaScript 中存储的全局范围内创建的常量在哪里?的主要内容,如果未能解决你的问题,请参考以下文章