繁体   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