问题标签 [global-variables]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
417 浏览

c# - 取消全局变量?

我有一组深度在 20 年代某处的树对象。这棵树中的每个节点都需要访问其树的根。

几个解决方案:

  1. 每个节点可以直接存储对根的引用(浪费内存)
    • 我可以通过“上升”(浪费周期)在运行时计算根
    • 我可以使用静态字段(但这相当于全局)

有人可以提供一种不使用全局(在任何变体中)但在内存或周期中分别比 #1 或 #2 更有效的设计吗?

编辑:由于我有一组树,我不能简单地将它存储在静态中,因为很难区分树。(感谢麦克库尔特)

0 投票
7 回答
974 浏览

memory - 更严重的罪过:副作用或传递大量物体?

我在函数内部的循环中有一个函数。内部函数在内存中获取并存储大量数据向量(作为全局变量......我使用的是“R”,类似于“S-Plus”)。循环遍历要获取的一长串数据。外部函数启动该过程并传入要获取的数据集列表。

我对内部函数进行了编程,以便在移动到下一个数据集之前存储每个数据集,因此外部函数的所有工作都会作为对全局变量的副作用发生......这是一个很大的禁忌。这比收集和返回一个巨大的、占用大量内存的向量是好还是坏?有没有更好的第三种方法?

如果我将数据向量存储在数据库中而不是内存中,答案会改变吗?理想情况下,我希望能够在不丢失终止之前处理的所有信息的情况下终止该功能(或使其因网络超时而失败)。

0 投票
6 回答
1194 浏览

c - 将全局重构为本地。它们应该是静态的吗?

我正在重构“意大利面条代码”C 模块以在多任务 (RTOS) 环境中工作。

现在,有很长的函数和许多不必要的全局变量。

当我尝试用局部变量替换仅存在于一个函数中的全局变量时,我陷入了困境。每个全局变量都表现得像本地“静态” - 例如,即使您退出并重新进入函数,也保持其值。

对于多任务处理,“静态”本地变量是全局变量中最差的。它们使函数不再重新输入。

有一种方法可以检查函数是否在保留变量值重新进入而不跟踪所有逻辑流的情况下进行中继?

0 投票
5 回答
41910 浏览

php - PHP session side-effect warning with global variables as a source of data

I'm trying to host a PHP web site that was given to me. I see this warning:

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

What does this mean? How might I track down the source of this problem within the code?

0 投票
16 回答
48670 浏览

c - 什么时候可以在 C 中使用全局变量?

显然那里有很多不同的意见,从“从不!总是封装(即使它只是一个宏!) ”到“这没什么大不了的——在比不方便的时候使用它们。

所以。

具体的,具体的原因(最好有例子)

  • 为什么全局变量很危险
  • 什么时候应该使用全局变量来代替替代品
  • 对于那些试图不恰当地使用全局变量的人来说,有哪些替代方案

虽然这是主观的,但我会选择一个答案(对我来说,这最能代表每个开发人员应该与全局变量之间的爱恨关系),社区将投票给他们。

我相信新手拥有这种参考很重要,但如果存在与您的答案基本相似的另一个答案,请不要弄乱它 - 添加评论或编辑其他人的答案。

-亚当

0 投票
3 回答
384 浏览

global-variables - 您将程序范围变量放在 UI 驱动的应用程序中的什么位置?

好的,所以我知道全局变量被认为是不好的,并且单例模式被过度使用了。我在很多地方读到过,一个类应该只执行一项任务,并且只包含那些允许它完成这项任务的变量。然而,在处理我的最新项目时,我实际上在编写任何代码之前考虑了这些规则,并注意到我倾向于在程序的一开始就破坏它们。

我目前正在开发基于 MFC 对话框的应用程序,但这个问题可以应用于任何 UI 驱动的应用程序。我有单独的类来处理状态机、文件读/写和硬件接口。所有这些对象都需要某种类型的 UI 控件或属性显示/编辑。在 MFC 对话框应用程序中,对话框就是程序,所以它必须存在,直到程序关闭。我通常只是将对象放在应用程序的主对话框类中,并让对话框类具有双重职责;作为主 UI 和应用程序中所有其他对象的主页。在其他应用程序中,我在全局范围内创建了这些对象,并从需要它们的任何地方引用它们。这两种方式似乎都不正确。第一个选项打破了一个类,一个任务的规则,第二个依赖全局变量并创建隐藏的依赖项。我可以建立某种类型的依赖注入,但是我要注入的所有这些变量会驻留在哪里?

我只是想知道其他人如何在不违反规则的情况下组织他们的程序?

0 投票
4 回答
3926 浏览

php - PHP 自动“获取”变量

我正在为我的公司设计一个新网站,并且我正在尝试实现切换导航,这是我过去在所有网站上使用的。

出于某种原因,当我转到 index.php?x=products 时没有任何反应,它仍然显示 inc/main.php,换句话说,它没有从 URL 中检测到 X 变量。这与全局变量有关吗?

0 投票
10 回答
4742 浏览

c - 从全局结构中读取时是否需要信号量?

一个相当基本的问题,但我没有看到它在任何地方被问到。

假设我们有一个全局结构(在 C 中),如下所示:

我似乎很清楚,如果我们有很多线程读写,我们需要一个信号量(或其他锁)在written_frequently成员上,即使是读取,因为我们不能 100% 确定这个结构的分配是原子的.

如果我们想要很多线程来读取read_only成员,而没有线程来写入,那么我们是否需要在结构访问上设置一个信号量来读取?

(我倾向于说不,因为不断更改之前和之后的位置这一事实不应该影响read_only成员,并且读取该值的多个线程不应该相互干扰。但我不确定。 )


[编辑:我现在意识到我应该更好地问这个问题,以便非常具体地澄清我的意思。当然,当我第一次问这个问题时,我并没有真正理解所涉及的所有问题。当然,如果我现在全面编辑问题,我会毁掉所有这些好答案。我的意思更像是:

我问的主要问题是,由于这些数据是结构的一部分,它是否会受到其他结构成员的影响,是否会反过来影响它们?

事实上,成员是整数,因此写入可能是原子的,在这种情况下实际上只是一个红鲱鱼。]

0 投票
4 回答
1419 浏览

c# - 在 C# Windows 应用程序中存储静态用户数据

我有一个应用程序需要在启动应用程序时点击 ActiveDirectory 以获取用户权限/角色,并在整个过程中持续存在。

我不想在每个表单上都点击 AD 来重新检查用户的权限,所以我希望用户的角色以及登录用户的其他数据在应用程序中的任何表单上都可以全局使用,这样我就可以正确必要时隐藏功能、按钮等。

就像是:

在 Windows 应用程序中存储静态用户数据的最佳做法是什么?单例或全局变量等解决方案可能有效,但我试图避免这些。

传递给每个表单的构造函数的用户对象是否同样糟糕?

0 投票
4 回答
1287 浏览

php - PHP 模板

我正在用 PHP 编写一个简单的模板层,但我有点卡住了。以下是它目前的工作方式:

首先,我使用fetch_template从数据库中加载模板内容 - 这很有效(如果您有兴趣,我会在启动时收集所有模板)。

我在模板代码和逻辑中使用 PHP 变量 - 例如:

然后我使用output_template(下面)解析模板中的变量并替换它们。以前我使用带有美化str_replace模板类的模板标签,但效率太低。

如果您还没有猜到,我的问题是变量没有在函数内部声明 - 因此函数无法解析它们,$template除非我将它们放在全局范围内 - 我不确定我是否想要这样做. 或者有一个变量数组作为函数中的参数(这听起来更乏味但可能)。

除了在我的代码中使用函数中的代码(它只是一个单行代码)而不是使用函数之外,有没有人有任何解决方案?

谢谢,罗斯

Ps 我知道 Smarty 和大量的模板引擎 - 我不打算使用它们,所以请不要推荐它们。谢谢!