GTS*_*Joe 2 javascript variables let
以下代码将输出“1”。但是,关键字“let”不应该使 xa 成为全局变量,从而使其对 das() 不可见吗?let 应该将变量的范围限制为仅声明它们的块,但在这里,我看到一个内部函数可以访问“let”变量,即使 x 是在其范围之外声明的。这怎么可能?
function letTest() {
function das () {
console.log(x);
// How does this function have access to a let variable declared outside its scope?
}
let x = 1;
das();
}
letTest();
Run Code Online (Sandbox Code Playgroud)
这是一种思考如何let
工作的方式:
let
.{
.let
找到相应的}
.这为您提供了变量可见的范围。如果函数定义出现在该范围内,那很好;该变量对该函数中的代码可见。
现在,什么是小有点不可思议的是,在你的榜样变量看起来像它在示波器的使用之前它的声明。这就是引用出现在声明之前这一事实变得更有趣的地方。
通常,如果作用域中的代码在实际发生let
之前引用了一个-declared 变量let
,那就是一个错误。但是,这是运行时的事情,而不是语法的事情。在您的情况下,在运行时let
将在调用嵌套函数时“发生”。