JavaScript 中的局部变量和全局变量

我见过很多这样的事情,所以尽管我会在 JavaScript 变量范围内整理一个快速课程。JavaScript 中的局部变量和全局变量之间存在一些重要差异,如果您不知道发生了什么,这会导致白发。

作用域决定了代码可以看到哪些变量。如果在函数内部创建了一个变量,那么它可以说是本地的,因为只有本地运行的代码才能看到它。可以被代码的任何部分访问的变量称为全局变量。这在 JavaScript 中很特别,我稍后会谈到。

这个作用域概念很重要,就好像一个变量在当前作用域之外,那么代码就看不到它。JavaScript 中的一切都是变量,因此了解如何以及何时可以访问变量很重要。

要在 JavaScript 中创建局部变量,请执行以下操作:

<script type="text/javascript">

var variable;

</script>

这里要注意的一件事是,如果您在全局空间中(即在函数作用域之外)创建变量,那么它将是全局的。如果此代码在函数内运行,则创建的变量将是该函数的本地变量。

要在 JavaScript 中创建全局变量,请执行以下操作:

<script type="text/javascript">

variable;

</script>

无论在何处创建,此变量将始终是全局的。

这里非常重要的一点是,当 JavaScript 遇到全局变量声明时,它会向上遍历浏览器对象模型 (BOM) 树,以查看是否设置了任何具有相同名称的变量。如果有,那么它会使用此处定义的变量覆盖该变量。即使在函数范围内以这种方式定义变量,也会发生这种情况。

通过运行以下命令试一试:

<script type="text/javascript">

// 创建一个全局变量。

var variable = 1;

 

var runMe1 = function() {

  console.log('runMe1');

  console.log(variable); // 打印 1

  // 改变全局变量。

  variable = 2;

  console.log(variable); // 打印 2

}

 

var runMe2 = function() {

  console.log('runMe2');

  console.log(variable); // 打印未定义

  // 创建并设置局部变量。

  var variable = 1;

  console.log(variable); // 打印 1

}

 

runMe1();

runMe2();

console.log('root');

console.log(variable); // 打印 2

 

</script>

运行此代码时您可能会发现奇怪的一件事是,第一次尝试打印 runMe2() 中的“变量”变量会产生“未定义”响应。然而,这确实有道理。发生这种情况是因为 JavaScript 知道稍后将在此函数中创建该变量,因此不会引入同名的全局范围变量。

那么为什么这很重要呢?假设您包含了一个具有名为“a”的变量的框架或第三方脚本。这可能看起来很牵强,但这种事情在 JavaScript 缩小和闭包编译器的世界中很常见。一切都会正常工作,直到您尝试在您自己的代码中定义一个名为“a”的全局变量,并为其分配一个值来改变所包含代码的工作方式。这类问题真的很难追查,尤其是在缩小代码中。如果您创建一个名为 'a' 的局部变量,那么它将具有局部作用域(即在当前函数调用中)并且不会破坏全局变量。

那么,底线?将变量定义为本地变量(如在“var variable; ”中)是一种很好的做法,这样它们就不会破坏范围内的任何其他东西。这样做是理所当然的,可以防止将来发生全局变量的任何代码中断。

以上是 JavaScript 中的局部变量和全局变量 的全部内容, 来源链接: utcz.com/z/360864.html

回到顶部