function foo(a)
{
var b = a*2;
function bar(c)
{
console.log(a,b,c);
var c= 3;
}
bar(4);
var c= 4;
var a= 2;
}
foo(1);
为什么c不是3?尽管var c = 3的事实是在bar()的词法范围内定义的,但为什么var c = 4被选中,即使它被定义在bar()调用之下? 请帮助我理解如何选择这些值并将其分配给变量。
答案 0 :(得分:0)
c
在执行分配之前不会变为3,这是在您的日志输出之后。
var c
这里没有声明一个新变量,因为你已经有c
作为函数的参数(但你是对的,如果确实如此,声明将被“悬挂” “---这就是你想在这里寻找得到好答案的术语。”
为什么选择var c = 4,即使它被定义在bar()调用下面?
不是“挑选”。在您的功能中,您会看到4
,因为c
是函数参数,您将其称为bar(4)
。
来自外部函数的c
被内部函数中的另一个c
的本地声明遮蔽,并且无法访问。