问题标签 [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 投票
5 回答
5008 浏览

php - PHP 从类函数中访问外部 $var

在 PHP 中,如何在类的函数中使用外部 $var?例如,假设 $some_external_var 设置为 true 并且您有类似

谢谢

0 投票
9 回答
16989 浏览

c++ - 如何防止我的“未使用”全局变量被编译出来?

我正在使用静态初始化来简化在 C++ 中使用工厂注册某些类的过程。不幸的是,我认为编译器正在优化“未使用”的对象,这些对象旨在在其构造函数中完成有用的工作。有没有办法告诉编译器不要优化全局变量?

SomeClass 的构造函数中的断点没有被命中。在我的实际代码中, SomeClass 在头文件中,而实例在源文件中,或多或少是单独的。

编辑:正如 KJAWolf 所猜测的,这段代码实际上被编译成一个静态库,而不是可执行文件。其目的是将静态库也提供的某些类型注册到类型及其创建者的静态列表中,以便工厂在构造时从中读取。由于这些类型是随 lib 提供的,因此不希望将此代码添加到可执行文件中。

我还发现,通过将代码移动到另一个包含其他现有代码的源文件,它可以正常工作。似乎有一个完全由这些全局对象组成的文件是导致问题的原因。就好像那个翻译单元被完全忽略了。

0 投票
4 回答
317 浏览

perl - 当我在 for 循环中声明某些内容时,为什么 Perl 脚本会要求“全局声明”?

我正在阅读infile并想将其打印$digitoutfile。但是 Perl 脚本给出了一个错误,提示“全局符号“$digit”需要显式包名”。但是,如果我确实将其声明为 global ,那么 this 值将打印到outfile而不是从infile中提取/读取的值。关于应该做什么的任何建议?$digit=''

这就是我的做法:

0 投票
3 回答
165776 浏览

r - R中的全局变量

我正在查看手册,我想问社区:我们如何在函数中设置全局变量?

0 投票
4 回答
4068 浏览

c++ - C++ 全局初始化能有多懒?

我习惯于认为全局/静态类成员的所有初始化都发生在 main() 的第一行之前。但我最近在某处读到该标准允许稍后进行初始化以“协助动态加载模块”。在动态链接时我可以看到这是真的:我不希望在我 dlopen'ed 库之前初始化库中的全局初始化。但是,在一组静态链接在一起的翻译单元(我的应用程序的直接 .o 文件)中,我会发现这种行为非常不直观。这只是在动态链接时才延迟发生还是可以随时发生?(或者我读错了什么?;)

0 投票
1 回答
2638 浏览

c++-cli - 托管类型的全局对象

有没有办法声明/定义托管类型的全局/静态对象?

0 投票
4 回答
1323 浏览

winforms - Winforms:在整个应用程序中访问类属性

我知道这一定是一个古老而疲惫的问题,但我似乎无法通过我可信赖的朋友(又名谷歌)找到任何东西。

我有一个 .net 3.5 c# winforms 应用程序,它在应用程序启动时向用户显示登录表单。成功登录后,我想跑到数据库,拉入一些特定于用户的数据并将它们(在属性中)保存在一个名为AppCurrentUser.cs的类中,可以跨程序集中的所有类访问该类 - 目的在这里,我可以使用一次性读取的数据填充一些属性,而不是每次需要时都调用数据库。在 web 应用程序中,我通常会使用 Session 变量,我知道 WinForms 中不存在这种概念。

类结构类似于以下内容:

现在,我有一些选项需要专家建议:

作为一个“哑”类,我应该使属性非静态,实例化该类,然后设置属性......但是我只能从创建它的类中访问该实例,对吧?

从逻辑上讲,我相信这些属性应该是静态的,因为我只会在整个应用程序中使用该类一次(而不是创建它的新实例),并且它的属性值将在应用程序关闭时“重置”。(如果我创建它的一个实例,我可以在应用程序关闭时处理它)

我应该如何构建我的类以及如何在我的程序集中的所有类中访问它的属性?我真的很感激你在这方面的诚实和有价值的建议!!

谢谢!

0 投票
3 回答
7046 浏览

c# - C#:因此,如果静态类对于存储全局状态信息是不好的做法,那么提供同样便利的好选择是什么?

我一直注意到静态类在用于存储全局信息方面在 SO 上有很多不好的代表。(而且全局变量一般都被轻视)我只想知道下面我的例子有什么好的选择......

我正在开发一个 WPF 应用程序,从我的数据库中检索到的数据的许多视图都是根据当前登录用户的 ID 进行过滤的。同样,我的应用程序中的某些点应该仅供被视为“管理员”的用户访问。

我目前在静态类中存储了一个loggedInUserId和一个isAdmin bool。

我的应用程序的各个部分都需要此信息,我想知道为什么在这种情况下它并不理想,以及替代方案是什么。启动和运行似乎非常方便。

我唯一能想到的替代方法是使用 IoC 容器将 Singleton 实例注入需要此全局信息的类中,然后这些类可以通过其接口与之对话。但是,这是否矫枉过正/导致我陷入分析瘫痪?

提前感谢您的任何见解。


更新

所以我倾向于通过 IoC 进行依赖注入,因为它可以更好地提高可测试性,因为如果需要,我可以交换一个提供“全局”信息的服务和一个模拟。我想剩下的就是注入的对象应该是单例还是静态的。:-)

会选择马克的答案,虽然在等着看是否有更多的讨论。我不认为有这样的正确方法。我只是有兴趣看到一些可以启发我的讨论,因为在一些类似问题上似乎有很多“这很糟糕”“那很糟糕”的陈述,而没有任何建设性的替代方案。


更新#2 所以我选择了罗伯特的答案,因为它是一个很好的替代方案(我认为替代方案是一个奇怪的词,可能是框架中内置的 One True Way)。它不会强迫我创建一个静态类/单例(尽管它是线程静态的)。

唯一让我感到好奇的是,如果我必须存储的“全局”数据与用户身份验证无关,这将如何解决。

0 投票
3 回答
1631 浏览

c++ - 避免嵌入式编程中的全局变量

在我进入的嵌入式编程类型中,运行代码的确定性和透明度受到高度重视。例如,我所说的透明度是指能够查看内存的任意部分并知道那里存储了哪些变量。因此,正如我确信嵌入式程序员所期望的那样,如果可能的话,应该避免使用 new,如果无法避免,那么就仅限于初始化。

我理解这样做的必要性,但不同意我的同事这样做的方式,我也不知道更好的选择。

我们拥有的是几个全局结构数组和一些全局类。有一组结构用于互斥体,一组用于信号量,一组用于消息队列(这些在 main 中初始化)。对于每个运行的线程,拥有它的类是一个全局变量。

我遇到的最大问题是单元测试。#include当我想测试我不想测试的全局变量的类时,如何插入模拟对象?

这是伪代码中的情况:

foo.h

酒吧.h

酒吧.cpp

如果我想要更多或更少的任务怎么办?foo1 的构造函数中的一组不同的参数?我想我必须有一个单独的 bar.h 和 bar.cpp,这似乎比必要的工作要多得多。

0 投票
2 回答
855 浏览

javascript - Javascript 本地与全局

我以为我的脑子里已经解决了这个烂摊子,但出于某种奇怪的原因,它不起作用。

如果您在函数/范围之外声明一个变量并在函数内没有 var 的情况下引用它,那么它会更改先前声明的变量......对吗?

但是,第一个警报返回正确的价格,但第二个(最后一个)警报返回 0。我做错了什么?