2011-09-21 143 views
3

我是JavaScript新手,并且有关访问函数中变量的最佳实践的简单(我假设)问题:全局变量与将值传递给函数?

什么时候应该声明全局变量,而不是简单地将值传递给函数?

+0

关于在JavaScript中使用全局变量,StackOverflow已经存在很多问题。如果您使用此页面右上角的搜索字段,则会发现很多信息。 – user113716

+0

@patrickdw:对不起。就像我所说的,我是JavaScript新手,有时无法自行找到问题。我只是在StackOverflow上做了另一个搜索,看看我能找到什么 - 不是很适用(可能是由于我的JavaScript新手状态)。我很乐意阅读上述材料!什么是寻找它的好方法? –

+1

此搜索[“什么时候应该在JavaScript中使用全局变量”](http://stackoverflow.com/search?q=q = when + should + I + use + global + variables + in + javascript)应该给你足够的素材。你会发现一致的答案是尽可能地避免全局性。任何未在函数中声明的变量,或未使用'var'声明的变量都将是全局变量。 – user113716

回答

5

声明全局变量只能用作最后选项。

全局变量一般不好,特别是在JavaScript中。根本没有办法阻止另一块JavaScript的破坏你的全球。这种破坏会悄然发生并导致运行时错误。

以下列为例。

// Your code 
myParam = { prop: 42 }; 
function operateOnMyParam() { 
    console.log(myParam.prop); 
} 

在这里,我宣布2个全局变量

  • myParam
  • operateOnMyParam

而孤立测试你的JavaScript这可能会很好地工作。但是,如果测试用户与出现这种情况有以下定义

// My code 
function myParam() { 
    console.log("..."); 
} 

这也定义了一个全局命名值其myParam与你擦出myParam我的JavaScript库结合您的JavaScript库后会发生什么。哪一个取决于脚本的导入顺序。但无论哪种方式,我们中的一个人都陷入困境,因为我们的全球物体之一已经死亡

+0

你能解释一下,或者链接到别人的解释,为什么这是? –

+0

@Nathan - http://c2.com/cgi/wiki?GlobalVariablesConsideredHarmful –

+0

@Nathan - 也许对你更好:http://c2.com/cgi/wiki?GlobalVariablesAreBad –

2

有很多很多的原因..但一个简单的是..函数的参数只存在于函数中,而它正在运行。全局变量存在所有的时间,这意味着:

  • 它占用的内存中,直到您手动“摧毁”了
  • 每个全局变量的名称必须是唯一的
  • 如果,你的函数内..你调用另一个函数..最终调用第一个函数,突然间你可能会得到意想不到的结果。

总之:因为函数参数只活了一个非常短的时间内和之外的功能不存在,它更容易理解这是怎么回事,并大大降低了错误的风险。

2

在处理无框架JavaScript时,我会将我的简单变量和函数存储在对象字面上,以免混乱全局命名空间。

var myObject = { 
    variableA : "Foo", 
    variableB : "Bar", 
    functionA : function(){ 
     //do something 
     //access local variables 
     this.variableA 
    } 
} 

//call functions and variables 
myObject.variableA; 
myObject.functionA();