Javascript,使用一个本地对象而不是许多局部变量

时间:2015-06-12 15:12:43

标签: javascript variables object global-variables local-variables

我经常使用jslint和工具来验证我的代码是否存在编程错误......

在编程过程中,我经常发现我需要局部变量或局部函数来做一些简单的事情。所以我转到我本地范围顶部的主要单个var语句并进行调整,有时会破坏我的创意流程。所以有时我会在代码中间声明一行var以继续编程,然后在重构之后将其移到顶部var语句中。

今天我有一个想法,我想在Google或stackoverflow上探索并找不到任何内容。

我的想法是这样,只需声明一个临时对象并将其用于任何需要。例如:为新变量或函数添加一些属性。

所以而不是:

// if I omit the last comma, the next variable will be a global
var variable1 = "Hello World!",  
variable2 = "Testing...";  

(... some code ...)
var variable3 = 42;

我会改用:

var temp = {};
temp.variable1 = "Hello World!";
temp.variable2 = "Testing...";

(... some code ...)
temp.variable3 = 42;

所以我不冒风险污染全局命名空间,我根据需要声明变量,并且不要与var语句竞争,因为我总是知道一个变量前面带有" temp。"在当地范围内。

任何评论或建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

问自己一个问题:你见过其他人这样做过吗?我个人而言,没有。这应该表明你有充分的理由不这样做。 基本上你所建议的是"命名空间",并不是新的。在许多情况下它很好但是在这里 - 对于临时变量 - 我建议它突出代码味道。

你提到了全局命名空间的污染,但这应该很少成为一个问题。通过将代码分解为函数,类或模块,您的变量将包含在该范围内。

  

所以有时我会在我的中间声明一行var   代码继续我的编程,然后在顶部var移动它   在重构之后的陈述。

这听起来很糟糕。听起来你的代码块很长,这表明你应该从你的代码中提取函数。

我还指出,您还在示例中使用名为temp的变量来污染全局命名空间。

考虑常见的JavaScript代码库; jQuery只暴露了jQuery或$变量。 Lodash / Underscore只有_。 Backbone有" Backbone"等等。为什么您的申请特别?只有一个曝光点。

您的问题的另一个潜在解决方案是使用模块系统。编译时,代码将被封装在一个闭包中,而根本不会暴露给外部世界。使其模块化也将导致更整洁的应用。

答案 1 :(得分:0)

避免全局范围污染的最佳方法是在小而独立的功能和模块中打破代码。

由于您在代码中间有变量声明,因此您必须重构代码。我个人认为你不需要这样做,我实际上发现代码更容易推理变量被声明为尽可能接近它们使用的位置。只要您对示波器和吊装的工作方式感到满意,我就没有理由将您的所有声明放在功能的顶部。