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

如何理解javascript中的全局变量和局部变量,javascript,Javascript,第一次测试: 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。。这是如

第一次测试:

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
。。这是如何工作的?

因为提升会创建一个局部变量
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"); }
}

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

函数声明
函数a(){}
b
函数的局部范围内声明变量名
a
(并为其分配函数)。分配给
a
时,将分配给该局部变量,而不是全局变量

应用提升后,您的代码相当于

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

第一个示例(通过JavaScript)解释为:

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


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

我明白了。相当棘手。感谢您的快速回复。此处提供了此示例及其说明:
var a = 1;
function b() {
  var a = function () {};
  a = 10;
  return;
}