簡體   English   中英

function 內的 var 變量重新分配

[英]var variable reassignment within function

我不明白為什么可以在 function 中重新分配var變量,但這種更改也適用於 function 之外。 為什么/如何?

var c = 1;

function Fn() {
c = 2;
}
Fn();
c; // 2

為什么值2不限於function的scope? When I write c = 2 within a function, does the javascript engine automatically hoist a new var c outside of the function and assigns it the value undefined , which is then changed to 2 once Fn() is called?

它適用於函數外部,因為在函數內部,您正在更改變量

沒有創建僅存在於函數內部的新變量。


為什么值 2 不限於函數的范圍?

您沒有使用varletconst或任何其他方法在函數范圍內創建變量。

您正在訪問已在更廣泛范圍內創建的變量。


當我在函數中編寫 c = 2 時,javascript 引擎是否會自動在函數外部提升一個新的 var c 並為其分配未定義的值,然后在調用 Fn() 后將其更改為 2?

不,沒有新變量。 只有你已經在函數之外創建的c

這是關於 javascript 的常見抱怨。 由於您使用了“Var”,因此它具有全局范圍,因此即使您在使用c=2時處於新函數中,因為它已經在全局范圍內定義,所以它已在全局范圍內更改。 使用“Let”有助於定義函數的局部變量,而“const”將全局變量定義為常量,因此它們無法更改。 當您在不同的 JavaScript 文件中有兩個同名的全局變量,然后引用這兩個文件以在頁面上使用時,這個問題特別有趣。 應謹慎使用全局變量。

When you start run this program, engine will store your variable which declared with "var" keyword in global object (window) then move on to get in the function, Engine will create Special Scope for function is called "Function Execution Context" ( FEC ) function 中的每個聲明都將在此范圍內可用( FEC ),因此當您的 function 的引擎執行主體時,會發現對變量的重新分配稱為“c” ,如果沒有,它將在當前 Z31A11FD140EC9AEEF2 中查找它找到它,將移動到父 scope,在這種情況下,全局 Scope 是它的目的地,將找到搜索到的變量,然后用新值重新分配它。

閱讀這篇精彩的文章 -> execution-context-how-javascript-works-behind-the-scenes

暫無
暫無

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

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