如何理解javascript中的全局和局部变量

How to understand global and local variable in javascript

本文关键字:全局 局部变量 何理解 javascript      更新时间:2023-09-26

第一次测试:

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

第二次测试:

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

在第一个测试中,a等于1,尽管我在方法中将其设置为10。在第二个测试中,我将它设置为10,当我输出它时,它被设置为10。这是如何工作的?

函数声明function a() {}b函数的本地作用域中声明了一个变量名a(并为其分配函数)。当您分配给a时,您将分配给该局部变量,而不是全局变量。

应用吊装后,您的代码相当于

var b = function b() {
    var a = function a() {};
    a = 10;
    return;
}
var a = 1;
b();
alert(a);    // 1, obvious now

因为提升会创建一个局部变量a,在您尝试为其赋值之前,它会屏蔽全局变量。

在第一次测试中,您创建了一个函数,该函数存储在本地变量a:中

function b() {
    a = 10;
    return;
    function a() {} // can be called using a() inside this function
}

因此,您可以在函数b()中使用a()来调用此函数。尝试:

function b() { 
    a(); // alerts "hi"
    a = 10;
    return;
    function a() { alert("hi"); }
}

现在,在局部变量a中存储数字10,而不是函数。全局变量保持不变,因此外部警报仍显示1。

第一个例子(由JavaScript)解释为:

var a = 1;
function b() {
  var a = function () {};
  a = 10;
  return;
}

在JavaScript中,所有局部变量(在本例中是将保存函数的局部变量a)都在函数的顶部声明。

局部变量a被设置为10,而不是全局变量。返回后,它就不复存在了。