Javascript 有人能解释一下代码执行的步骤吗?

Javascript 有人能解释一下代码执行的步骤吗?,javascript,Javascript,执行后f()2如何?我们开始: 声明a=1,然后将其设置为2,现在将b设置为2,因为函数g()返回2,因为此时调用此函数a=2 现在将a设置为3 函数返回b,在本例中,b是2 只需一步一步地按照代码进行操作让我们逐行看看会发生什么: function f() { var a = 1; a = 2; var b = g(); a = 3; return b; function g() { return a; } } f(); // returns '2'

执行后f()2如何?

我们开始:

声明
a=1
,然后将其设置为
2
,现在将b设置为2,因为函数
g()
返回2,因为此时调用此函数
a=2

现在将
a
设置为3

函数返回
b
,在本例中,b是2


只需一步一步地按照代码进行操作

让我们逐行看看会发生什么:

function f() {
  var a = 1;

  a = 2;
  var b = g();
  a = 3;

  return b;

  function g() {
    return a;
  }
}

f(); // returns '2'

这就是为什么您将2视为返回值,在赋值时,b等于a,即2。

添加到其他答案中:在Javascript中,每个函数都有自己的作用域,可以访问其中定义的变量。但它也可以从“外部”范围(声明它的上下文)访问变量

在这种情况下,
a
f()
范围内的一个变量,但由于
g()
也在
f()
的范围内声明,因此它也可以访问
a
。这个场景在JS中也称为闭包。



执行函数后
f()
此函数将查看它将返回的值 然后它将返回
b
然后
b
的值是多少,它返回函数,该函数返回
a
的值,然后它将搜索
a
的值,并将取
a=>2的上次修改值

a is 1
a is 2
b is execution of g AT THIS POINT, which is a, which is 2
a is 3
return b, which is still 2

为什么不呢?我是说。。。你期待什么?A在返回时是2,然后存储在b中,然后返回。如果很难遵循
f
返回
b
这是函数
g
的返回,在设置b之前设置为
2
a
,请使用调试器?哦,现在我想我明白了。调用var b=g()时,将调用函数g()并返回a。早些时候,我不知道将执行哪个返回语句?
then the rule is execute functions first 
and then search about variable values that functions contains