1

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

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

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

或者正在使用...

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

真的是唯一的方法吗?

除了调用函数“a()”之外,有没有办法让“b”成为全局变量?

4

3 回答 3

10

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

  1. 在全局范围内声明它,在任何函数范围之外。
  2. 将其显式分配为窗口对象的属性:window.a = 'foo'.
  3. 根本不声明(不推荐)。如果您var在第一次使用该变量时省略了关键字,那么无论您的代码在哪里发生,它都会被全局声明。

注意#1:严格模式下,如果你没有声明你的变量,你会得到一个错误(如上面的#3)。

注意#2:使用window对象分配全局变量(如上面的#2)在浏览器环境中可以正常工作,但在其他实现(例如nodejs)中可能无法正常工作,因为全局范围没有window对象。如果您使用不同的环境并想显式分配全局变量,则必须知道全局对象的名称。

于 2013-01-14T04:24:36.493 回答
2

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

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

除了调用函数“a()”之外,有没有办法让“b”成为全局变量?

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

于 2013-01-14T04:25:50.890 回答
0

在考虑创建变量全局范围之前,您应该考虑JavaScript 全局命名空间污染。您声明的全局变量越多,您的应用程序就越有可能与另一个应用程序的命名空间发生冲突并中断。因此,尽量减少全局变量的数量非常重要。

于 2013-01-14T04:49:52.843 回答