在Javascript中,全局变量不会改变函数中的值

In Javascript, global variable is not changing value inside a function

本文关键字:改变 函数 Javascript 全局变量      更新时间:2023-09-26
var a = 1;
function b() {
    function a() {}; // local scope
    a = 10; // global scope
}
b();
alert(a);

它提醒 1 而不是 10。我想知道为什么会这样?

函数名称和变量在Javascript中本质上是一回事。您可以通过以下方式声明函数:

var a = function () {};

对于大多数意图和目的,这与function a() {}相同。两者都在当前范围内创建一个符号,并使该符号的值成为函数。

正在做的是你用你自己的本地a来掩盖全球a。无论此本地a是通过 var a 还是通过 function a 定义的,都没有区别。

您的代码与此相同:

var a = 1;
function b() {
    var a = function () {}; // local scope
    a = 10;
}
b();
alert(a);

因此,局部作用域函数的声明会创建一个名为 a 的新局部变量,该变量最初分配了一个函数,但随后将其重新分配给 10 的值。 此内部分配不会触及范围更高的a

如果外部a定义在全局范围内,则可以为其分配:

 window.a = 10;

如果它不在全局范围内,那么它已经被a的内部定义"隐藏"了,并且没有办法直接从内部范围到达外部a

JavaScript 与其他语言不同:

® JavaScript(通常缩写为JS)是一个轻量级的,解释的, 具有一流功能的面向对象语言

什么是first-class

允许函数像任何其他值一样传递。

因此,正如 jfriend00 指出的那样,它将函数本地转换为函数中的变量,从而不会更改全局变量。