【问题标题】:Javascript - Defining a local variable after assigning a new value in a already declared global variable is overriding the global variable. Why? [duplicate]Javascript - 在已声明的全局变量中分配新值后定义局部变量将覆盖全局变量。为什么? [复制]
【发布时间】:2023-03-15 14:03:01
【问题描述】:

我正在学习 javascript 全局变量和局部变量。当我对它进行实验时(请参见下面的 jsfiddle),我很困惑为什么在执行 myFunction1() 后变量 a 的值变为 4 而不是 5。你认为在 javascript 内存中发生了什么,使其值为 4 而不是 5 ?

var a = 4;

myFunction1();
function myFunction1() {
  a= 5;
  var a= 6; 
} 
alert(a); //a = 4


myFunction2();
function myFunction2() {
  a= 5;
} 
alert(a); //a = 5

【问题讨论】:

  • 查看重复参考。简单地说:函数体中的 var 使该变量成为 whole 函数体中的 local 变量,因此在该函数体中对该变量的任何使用——即使当发生在var 语句之前——涉及该局部变量。

标签: javascript html jquery css reactjs


【解决方案1】:

你刚刚发现了hoisting

通过在函数内部声明var a,它可用于整个函数上下文(甚至在其声明之前),因此当您编写a = 5 时,实际的a 不是您所期望的,而是函数-作用域a

在第二种情况下,a 是您所期望的(在函数之外)

【讨论】:

  • 非常感谢@GuerricP。我现在明白了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 2019-02-27
  • 1970-01-01
相关资源
最近更新 更多