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