Javascript 有人能解释一下代码执行的步骤吗?
执行后f()2如何?我们开始: 声明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'
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