【发布时间】:2021-01-20 18:47:51
【问题描述】:
我想做这样的事情:
function defineGlobalConst(){
const s = 10;
}
但我想从代码中的任何位置访问变量 s,因为我没有输入“const”
【问题讨论】:
-
window.s = 10? -
@Terry that won't make s constant
标签: javascript
我想做这样的事情:
function defineGlobalConst(){
const s = 10;
}
但我想从代码中的任何位置访问变量 s,因为我没有输入“const”
【问题讨论】:
window.s = 10?
标签: javascript
你可以像这样定义一个全局变量:
在浏览器中:
function defineGlobalConst(){
window.s = 10;
}
在节点中:
function defineGlobalConst(){
global.s = 10;
}
如果你希望它是一个常量,你可以使用 defineProperty 和一个 getter:
Object.defineProperty(window, "s", {
get: () => 10,
set: () => { throw TypeError('Assignment to constant variable.') },
});
【讨论】:
s = 20 来更改 s 的值,它将不起作用,而是会引发错误。
Object.defineProperty,因为get 将返回您在其中定义的任何内容,如果您尝试更改它的属性,它的行为将不像普通的JS“常量”。
您唯一的选择是将值存储在窗口中。 请确保至少为您的值命名,因为它可能与窗口中已有的其他内容冲突:
// Create the namespace at the beginning of your program.
if (!window.MY_APP) {
window.MY_APP = {};
}
window.MY_APP.s = 10;
【讨论】:
可以通过使用反模式来解决您的问题。请注意,我不提倡这种方法,但从纯粹的“你能做到”的角度来看,在函数中分配的任何未声明的变量默认情况下都会变成全局(当然这不会像你一样创建一个常量'已经问过了,但我想我还是会展示它):
function foo(){
bar = "baz"; // implicit Global;
}
foo();
// Show that "bar" was, in fact added to "window"
console.log(window.bar); // "baz"
console.log(bar); // "baz"
【讨论】: