Javascript 正确的方法:始终将所有变量作为函数参数传递?

Javascript 正确的方法:始终将所有变量作为函数参数传递?,javascript,oop,function,Javascript,Oop,Function,我正在考虑正确的编程方法: 在编写JavaScript代码时,我引用了函数和对象中许多动态创建的全局对象和变量,尽管我没有将它们作为函数参数传递。这样,我就失去了函数的通用性和独立性,因为函数和对象依赖于我的应用程序中的另一个全局对象。我知道这一事实,但是,我的对象/函数通常需要使用许多变量 你能告诉我,我是否应该一直努力将所有变量和对象作为函数参数传递?这样就很清楚了,函数需要什么变量,如果我提供了正确的参数,函数将始终工作 或者,我不需要这么严格吗?只要我的函数/对象工作,尽管它们引用全局对

我正在考虑正确的编程方法:

在编写JavaScript代码时,我引用了函数和对象中许多动态创建的全局对象和变量,尽管我没有将它们作为函数参数传递。这样,我就失去了函数的通用性和独立性,因为函数和对象依赖于我的应用程序中的另一个全局对象。我知道这一事实,但是,我的对象/函数通常需要使用许多变量

你能告诉我,我是否应该一直努力将所有变量和对象作为函数参数传递?这样就很清楚了,函数需要什么变量,如果我提供了正确的参数,函数将始终工作

或者,我不需要这么严格吗?只要我的函数/对象工作,尽管它们引用全局对象,我就不需要再为这个问题操心了吗


我需要知道正确的编程方法,这样我就不会习惯错误的事情。

是的,您希望尽可能少地使用全局变量。如果结果是,您发现要向每个函数传递很多参数,那么您应该查看这些参数并询问它们的共同点。通常,添加其他对象会有所帮助。可以将参数组合到对象的实例变量中,并传递一个对象。然后,您将操作委托给该对象,而不是提取实例变量

例如,假设您有以下代码:

    drawLine(fromX, fromY, toX, toY, thickness, color, canvas)
可以创建一个点来保存x、y值,并创建一个图形上下文来保存厚度、颜色和画布。结果调用变为:

    drawLine(from, to, context)

您已经减少了参数的数量,并创建了包含常用操作的可重用对象。

我想大家都会同意,您应该尽可能少地使用全局变量。-代码变得更加可移植-类的“接口”将更加清晰-性能通常更好-等等。。。互联网上充斥着讨论这一问题的文章issue@Vic:+1为合理答案。非常感谢。是的,你说的很有道理。我希望听到更多关于这个主题的意见,看看是否所有的开发人员都得出结论。将drawLine作为Point.prototype上的方法可能更有意义,因此调用变成
from.drawLine(to,context)
…我倾向于将drawLine移动到context对象,而不是使其成为
context.drawLine(from,to)
@DavidBuck:+1谢谢你的回答。这对我来说是有意义的,它让我确信我在想什么,但并不总是遵循。我认为,没有必要等待另一个答案,我将这一个标记为已接受的答案。