【问题标题】:In Javascript, global variable is not changing value inside a function在Javascript中,全局变量不会改变函数内的值
【发布时间】:2015-02-02 09:41:24
【问题描述】:
var a = 1;

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

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

【问题讨论】:

标签: javascript


【解决方案1】:

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

var a = function () {};

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

你正在做的是用你自己的本地a 覆盖全局a。这个本地的a 是通过var a 还是function a 定义的没有区别。

【讨论】:

    【解决方案2】:

    你的代码是这样的:

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

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

    如果外部 a 定义在全局范围内,那么您可以分配给它:

     window.a = 10;
    

    如果不在全局范围内,则已被a的内部定义“隐藏”,无法从内部范围直接到达外部a

    【讨论】:

      【解决方案3】:

      JavaScript 不同于其他语言:

      JavaScript®(通常缩写为 JS)是一种轻量级的、解释性的、 一流的面向对象语言functions

      first-class 是什么?

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多