为什么变量b在这个例子中没有悬挂?
问题描述:
我读的Javascript权威指南,我遇到了一个关于功能范围说明:“JavaScript的功能范围是指在函数内声明的所有变量在整个函数的身体都可见”
由于巴()有在函数foo()中声明了一个变量b,为什么在这种情况下b没有被提升,并且输出不是未定义的(内部变量b应该在foo()的整个主体中可见)?为什么变量b在这个例子中没有悬挂?
var b =5 ;
function foo(x)
{
console.log(b);
function bar()
{
var b=4;
}
}
foo(4);
答
b
的内bar
范围是bar
功能。变量不可见外部它们的功能。这意味着所有变量将在全局可见,因为它们都会传播到全局范围/最外层函数中。这正是范围应该预防的范围。
b
在其范围内的功能,这是bar
;不是foo
。
你回答你自己的问题。由于bar是一个函数,因此b的作用域为bar。对foo来说是不可见的。只有酒吧是可见的,但酒吧内的一切都不是。 – Shilly