评估函数声明范围之外的变量

时间:2017-11-16 00:58:59

标签: javascript typescript

我有几个功能可以共同完成一项任务。每个功能都存在于自己的文件中。在我的主文件中,我编写了这些函数来完成我的任务。

因此,许多函数需要访问相同的变量。我最初的方法是在我的主文件中声明这些变量,期望我可以在我的函数中调用它们。

然而,当我运行它们时,我的函数内部会出现引用错误。我目前的替代方案包括将这些变量传递到每个函数中,但它看起来并不太优雅。我也考虑过上课,但我遇到的问题是无法将功能分成不同的文件(出于组织目的)。

// doSomething.ts
declare outerVariable

function doSomething() {
  console.log(outerVariable)
}


// main
import doSomething from './doSomething.ts'

let outerVariable = 5
doSomething() // Reference Error: outerVariable is not defined

我不认为变量阴影是一个问题,因为我从不在函数中使用这些名称创建变量。

了解发生了什么或者更好的方法来构建代码?

3 个答案:

答案 0 :(得分:1)

有没有办法完成你想要做的事情?是的,但也许这不是可行的方法。

您似乎需要重新考虑整个程序结构。

首先,污染全局命名空间绝不是一个好主意(可能在任何编程语言中)。如果您使用纯函数样式编写代码,那么是的,将变量作为参数传递给所有函数是它如何完成的。您可以在维基百科上阅读一些相关内容(第一段应该给您一个很好的概述):https://en.wikipedia.org/wiki/Functional_programming

也可能是最小化创建具有副作用的函数的情况,如问题评论中所指出的那样。

如果传递给这些函数的变量数量太大,也许您应该考虑将代码拆分为更小,更专业的函数/类。

单个文件通常只包含密切相关的函数或单个类。

现在,如果您不介意使用对象,那么您可以将一个或多个对象传递给函数,对所有变量进行分组。

此外,单例模式可能很方便:https://addyosmani.com/resources/essentialjsdesignpatterns/book/#singletonpatternjavascript

答案 1 :(得分:0)

尝试es6 export const variable = somevalue

答案 2 :(得分:0)

例如,您可以将变量作为参数传递给函数 也许值得考虑将它们重新组织成一个类,因此他们可以访问公共类字段

将代码实体彼此分离通常很好,因此将它们作为参数传递比通常声明全局变量更好

相关问题