全局变量与将值传递给函数?

时间:2011-09-21 21:50:08

标签: javascript variables

我是JavaScript的新手,并且有一个关于在函数中访问变量的最佳实践的简单(我推测)问题:

我应该何时声明一个全局变量,而不是简单地将值传递给函数?

3 个答案:

答案 0 :(得分:5)

声明全局变量应仅用作最后的选项。

全局变量一般都很糟糕,特别是在javascript中。根本没有办法阻止另一段javascript破坏你的全局。 clobbering将无声地发生并导致运行时错误。

以下面的例子为例。

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

这里我宣布了2个全局变量

  • myParam
  • operateOnMyParam

这可能在单独测试你的javascript时工作正常。但是,如果在测试用户之后将您的javascript库与我的javascript库结合,恰好具有以下定义

,会发生什么
// My code
function myParam() {
  console.log("...");
} 

这也定义了一个名为myParam的全局值,它与myParam冲突。哪一个获胜取决于脚本的导入顺序。但无论哪种方式,我们中的一个人都遇到麻烦,因为我们的一个全球物体已经死了

答案 1 :(得分:2)

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

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

简而言之:因为函数参数只存在很短的时间并且不存在于函数之外,所以更容易理解正在发生的事情,并且大大降低了错误的风险。

答案 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();