当前位置: 首页 > 面试题库 >

从其他函数访问变量而不使用全局变量

顾超
2023-03-14
问题内容

我从很多地方都听说过,全局变量本来就是讨厌和邪恶的,但是当使用一些非面向对象的Javascript时,我看不到如何避免它们。说我有一个函数,它使用复杂的算法使用随机数和填充物来生成数字,但是我需要在其他函数(回调或其他函数)中继续使用该特定数,因此不能成为同一函数的一部分。

如果最初生成的数字是局部变量,则无法从那里访问它。如果函数是对象方法,我可以将数字设为属性,但是它们不是属性,并且更改整个程序结构来执行此操作似乎有些复杂。全局变量真的那么糟糕吗?


问题答案:

要使在函数A中计算出的变量在函数B中可见,您可以选择三个选项:

  • 使其成为全球性的
  • 使其成为对象属性,或
  • 从A调用B时将其作为参数传递。

如果您的程序很小,那么全局变量还不错。否则,我会考虑使用第三种方法:

function A()
{
    var rand_num = calculate_random_number();
    B(rand_num);
}

function B(r)
{
    use_rand_num(r);
}


 类似资料:
  • 我假设在每次调用时都必须检查其变量是否初始化,因此将比慢,这样做对吗?

  • 问题内容: 如何在其他.go包/文件中的main.go中访问已声明/初始化的变量?不断告诉我变量未定义(我知道全局变量不好,但这只是用作时间戳记) 在main.go中 尝试访问其他.go文件中的StartTime,但保持未定义StartTime 问题答案: 我将改为“注入” starttime变量,否则在软件包之间会有循环依赖关系。 main.go otherpackage.go

  • 问题内容: 这(我的代码的简化版本)不起作用: 为什么?我要访问,因为如果失败,我想在上面记录错误。 递归地调用自身以创建目录列表,因此我担心将整体传递给自身(如中所述)可能会损害性能。 有没有一种方法可以在不传递参数的情况下访问内部?(PHP 5.2.x +) 编辑: 如果代码看起来像这样呢? 问题答案: 您必须将其传递给函数: 或将其声明为global: 如果变量不是全局变量,而是在外部函数中

  • 问题内容: 我知道我应该避免由于这样的混乱而首先使用全局变量,但是如果我要使用它们,以下是使用它们的有效方法吗?(我正在尝试调用在单独函数中创建的变量的全局副本。) 第二个函数使用的是否具有与使用和修改的的全局副本相同的值?定义后调用函数时,顺序重要吗? 问题答案: 如果你只想访问全局变量,则只需使用其名称即可。但是,要更改其值,你需要使用global关键字。 例如 这会将全局变量的值更改为55。

  • 我知道由于这样的混淆,我应该首先避免使用全局变量,但是如果我要使用它们,以下是使用它们的有效方法吗?(我正在尝试调用在单独的函数中创建的变量的全局副本。) 第二个函数使用的是否与使用和修改的的全局副本具有相同的值?定义后调用函数时,顺序重要吗?

  • 问题内容: 假设我有两个模块: py b.py 我的目标是使用in的功能,但更改该函数返回的值。具体来说,即使我运行,也将其查找为全局名称的来源。我基本上是在尝试创建功能对象的副本,该副本与之相同但用于获取其全局变量。是否有合理而直接的方法? 这是一个例子: 结果是当前,但我希望如此。 我想出了两种可行的复杂方法,但是我对其中任何一种都不满意: 使用复制和粘贴在模块中重新定义。真正的功能比显示的要