簡體   English   中英

在Javascript中,全局變量不會更改函數內部的值

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

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指出的那樣,它將函數轉換為函數中的局部變量,因此不會更改全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM