繁体   English   中英

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

[英]Global variables vs. passing a value into a function?

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

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

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

全局变量一般都很糟糕,特别是在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冲突。 哪一个获胜取决于脚本的导入顺序。 但无论哪种方式,我们中的一个人都遇到麻烦,因为我们的一个全球物体已经死了

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM