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

时间:2015-02-02 01:13:57

标签: javascript

var a = 1;

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

它警告1而不是10.我想知道为什么会这样?

3 个答案:

答案 0 :(得分:7)

函数名称和变量在Javascript中基本相同。您可以通过以下方式声明一个函数:

var a = function () {};

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

您正在做的事情是,您使用自己的本地a隐藏全球a。是否通过avar a定义了本地function a,这没有区别。

答案 1 :(得分:3)

您的代码与此相同:

var a = 1;

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

因此,本地范围函数的声明会创建一个名为a的新局部变量,该变量最初具有分配给它的函数,但您可以将其重新分配给10的值。此内部分配不会触及更高范围的a

如果外部a定义在全局范围内,那么您可以使用以下内容为其分配:

 window.a = 10;

如果它不在全球范围内,那么它已被隐藏"根据{{​​1}}的内在定义,无法直接从内部范围到达外部a

答案 2 :(得分:0)

JavaScript与其他语言不同:

  

JavaScript®(通常缩写为JS)是一种轻量级的解释,   具有一等functions

的面向对象语言

什么是first-class

  

allows functions to be passed around just like any other value.

因为jfriend00指出它在函数中将函数转换为局部变量,因此不会改变全局变量。