JavaScript 全局变量

2024-02-20

我应该如何创建一个变化变量作为全局变量?

所以像这样:

function globVar(variable){
   window.variable;
}

因此,通过这种方式,我也可以在自动模式下创建全局变量,而且我也可以更轻松地为自己创建它们:)

EDIT

例如,我可以创建一个全局变量,如下所示:globVar('myVariable'); then myVariable被添加到全局变量中。


很抱歉这么说,但您收到的答案是您应该远离的坏习惯。 A更好的编程实践,也许还有proper编程实践中,将是对全局变量进行伪命名空间,以免弄乱全局命名空间/范围。其背后的原因是为了让您的代码更易于管理,更重要的是,如果/当您的应用程序变得很大时,让您的生活更轻松。定义命名空间的一个简单机制是使用因 Douglas Crockford 而闻名的模块模式。

这是一个简单的例子:

var myNamespace = function(){
  var o = {};
  var globals = {};

  var setGlobVar = function(name, value) {
    globals[name] = value;
  };

  var getGlobVar = function(name) {
    if (globals.hasOwnProperty(name)) {
      return globals[name];
    } else {
      // return null by default if the property does not exist 
      return null;
    }
  };

  o.setGlobVar = setGlobVar;
  o.getGlobVar = getGlobVar;
  return o;
}();

要使用它,您只需像调用对象的方法一样调用它即可。

myNamespace.setGlobVar("secret_msg", "Dumbledore dies, so does Hedwig");
myNamespace.getGlobVar("secret_msg");

您还可以暴露globals变量而不是使用setGlobVar and getGlobVar如果您想简化访问变量的方式,请使用它的方法。


重点是远离在全局命名空间中定义变量(即window对象),通过创建您自己的命名空间来尽可能多地使用。这减少了名称冲突、意外重写或覆盖以及全局命名空间混乱的可能性。

执行此操作的一种更简单的方法是简单地定义一个对象并增强其属性。

var globals = {};
globals.SECRET_MSG = "Snape is not a traitor"

虽然我会通过包装来扩展这种方法globals进入特定于我的应用程序的命名空间。

var myNamespace = {};
myNamespace.globals = {};
myNamespace.globals.SECRET_MSG = "Snape is not a traitor"

注意:这实际上与我建议的原始模块模式方法相同,只是没有get and set访问器方法和编码不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 全局变量 的相关文章

随机推荐

  • 编写带有垂直标题的 HTML 表格的最常见方法? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 您编写具有垂直标题的 HTML 表格的首选方式是什么 通过垂直标题我的意思是表格有标题 th 标签位于左侧 通常 Header 1数据数据数据
  • 最大连续数

    我正在练习两个指针技术来解决最大连续数 LeetCode https leetcode com problems max consecutive ones 给定一个二进制数组 找出该数组中连续 1 的最大数量 示例1 Input 1 1 0
  • Html-Webpack-Plugin 模板:模块构建失败:SyntaxError:意外的标记

    当我尝试使用 index ejs 模板文件使用 html webpack plugin 进行构建时 会引发以下错误 即使我尝试加载为 html 文件或安装 ejs loader 仍然失败 我不确定 ejs loader 是否与 html w
  • mysql 错误 2002 (HY000): 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)

    我使用 在 Ubuntu 13 上 安装了 MYSQL sudo apt get install mysql 但跑完之后 mysql u root p 然后输入密码就会出现错误 ERROR 2002 HY000 无法通过套接字连接到本地 M
  • 在Python中初始化二维数组

    我在 python 中初始化二维数组时遇到问题 我想要一个 6x6 阵列 我做到了 arr None 6 6 但是当我这样做时 gt gt gt arr 1 2 10 gt gt gt arr None None 10 None None
  • 电子邮件中的 URL 是否已被搜索引擎索引,以便可以公开搜索?

    我在这里阅读了一些有关电子邮件客户端预取电子邮件中的 URL 的问题 对此的答案似乎是添加一个新的确认页面 用户必须在其中单击按钮来确认所需的操作 But this https stackoverflow com a 42147812 11
  • 外键到底是什么?

    好的 所以我知道数据库中的主键是什么 如果数据库中有一个表 则主键是表中每一行唯一的单个值 例如 id name whatever 1 Alice 2 Bob 45 Eve 988 所以我需要一个好的 简单的例子来解释外键到底是什么 因为我
  • 仅使用单精度浮点近似 [0,pi] 上的余弦

    我目前正在研究余弦的近似值 由于最终的目标设备是自行开发的 32 位浮点 ALU LU 并且有专门的 C 编译器 因此我无法使用 C 库数学函数 cosf 我的目标是编写在准确性和指令 周期数量方面有所不同的各种方法 我已经尝试过很多不同的
  • 空对象的条件类型

    是否有可能有一个条件类型可以测试可以为空的对象 例如 function test
  • 如何将我自己的代码/函数和外部java库添加到azure函数应用程序

    我编写了一些代码来在代码运行时创建一个文件 我的计划是按照定期计划将其放在 Microsoft Azure 函数应用程序上 因此它每小时或每天运行一次 我将使用计时器触发器并在那里也有一个 HTTP 请求触发器进行测试 但是 我不知道在哪里
  • 计算 C 中一致字符串的数量

    所以这是 leetcode 的一个问题 我遇到了一些问题 我已经看到解决这个问题的代码发布到 leetcode 的讨论部分 但我想知道是否有人可以帮助我解决这个问题我已经写过的代码 这就是问题所在 给你一个字符串allowed由不同的字符和
  • Visual Studio:针对私有和内部成员缺少 XML 文档发出警告

    我正在使用 Visual Studio 2005 VS 8 0 并且我希望强制执行所有类成员 而不仅仅是公共成员 都被记录的要求 虽然设置 Visual Studio 在公共 受保护或内部受保护成员未记录时生成警告很简单 但我正在寻找一种方
  • Cygwin 中的 .seh_savexmm 寄存器无效

    制作 我曾使用 cygwin 但遇到编译错误 我不确定 seh savexmm 的无效寄存器是什么 请帮我 我在谷歌上搜索了这个问题但没有找到 问题很多 但没有灵魂 请帮我 perl generate functions pl file o
  • 如何在 VSCode 中使用 yapf(或 black)

    我使用以下命令安装了 yapf conda install yapf 并在我的中添加下一行 vscode settings json file python linting pylintEnabled true python linting
  • 使用 Firebase 云功能实现发送电子邮件

    对于我们的网络应用程序 我们目前使用 Firebase 的免费计划 并且需要发送有关各种事件 触发器的电子邮件 问题是 我认为 Mailgun 及其云功能可以完美地完成此任务 但看起来只能将其 API 与 Firebase 的付费计划一起使
  • 无法在 C++20 中将 std::cin 与 char* 或 char[] 一起使用

    It used上班 阅读std cin到动态分配的chararray 或作为参数传入的数组 请参阅下面的 MCVE include
  • 使用 dask 加载大型压缩数据集

    我正在尝试将一个大型压缩数据集加载到 python 中 其结构如下 year zip year month 很多 csv 文件 到目前为止 我已经使用 ZipFile 库迭代每个 CSV 文件并使用 pandas 加载它们 zf ZipFi
  • 加载动画png [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在寻找一个透明的动画加载图标 然而 我知道我很懒 我不想自己做 如果这不是这篇文章的正确论坛 请原谅我 我过去在这里运气很好 有谁知道我在哪里可以
  • 将管道/连接作为上下文参数传递给多处理 Pool.apply_async()

    我想使用管道与池中的流程实例进行通信 但出现错误 让 p 成为 Pool 的一个实例 master pipe worker pipe Pipe self p apply async worker task handler info cont
  • JavaScript 全局变量

    我应该如何创建一个变化变量作为全局变量 所以像这样 function globVar variable window variable 因此 通过这种方式 我也可以在自动模式下创建全局变量 而且我也可以更轻松地为自己创建它们 EDIT 例如