声明空变量以使其全局化

时间:2013-01-14 04:23:37

标签: javascript global-variables

在JavaScript环境中,我可以在函数之前声明变量,以使变量在全局级别上可达。 例如:

var a;
function something(){
  a = Math.random()
}

这会使“a”成为全局变量吗?

或正在使用......

var a = function(){
  var b = Math.random();
  return b;
}
document.write(a())

真的唯一的办法吗?

除了调用函数“a()”之外,有没有办法使“b”全局?

3 个答案:

答案 0 :(得分:9)

基本上有3种方式来声明全局变量:

  1. 在全局范围内声明,在任何函数范围之外。
  2. 明确指定作为窗口对象的属性:window.a = 'foo'
  3. 根本没有声明(不推荐)。如果您在第一次使用变量时省略var关键字,则无论您的代码在何处发生,都将全局声明。
  4. 注意#1:strict mode中,如果您未声明变量,则会出现错误(如上面的#3所示)。

    注意#2:使用window对象分配全局变量(如上面的#2)在浏览器环境中工作正常,但可能在其他实现中不起作用(如作为nodejs),因为全局范围没有window个对象。如果您正在使用不同的环境并希望显式分配全局变量,则必须了解调用全局对象的内容。

答案 1 :(得分:2)

  

这会使“a”成为全局变量吗?

var declaration使变量局部变为封闭范围,通常是函数1。如果您在全局范围内执行代码,那么a将是一个全局变量。您也可以省略var,然后您的变量将隐式全局(尽管显式声明更能表明您的意图)。

  

除了调用函数“a()”之外,有没有办法使“b”全局?

您的b变量始终是函数a的本地变量,除非您删除var,否则永远不会离开它。

答案 2 :(得分:0)

在考虑制作变量全局范围之前,您应该考虑JavaScript global namespace pollution。声明的全局变量越多,应用程序与另一个应用程序的命名空间和中断冲突的可能性就越大。因此,最大限度地减少全局变量的数量非常重要。