

这是我关于“吊装”的注释,这是凯尔·辛普森(Kyle Simpson)撰写的《 您不知道Javascript:作用域和闭包 》的第四章。
在下面的示例中,我们可以看到“吊装”:
a = 2; var = a; console.log(a);
不熟悉JavaScript词法作用域的人们可能会期望此代码块中undefined ,因为似乎var = a重新定义a 。 但是,我们得到2 。
这是因为所有变量和函数声明都是在编译阶段进行的,而赋值是在执行阶段进行的。
JavaScript实际上是这样解释代码的:
var = a; a = 2; console.log(a)// 2
术语“吊装”源自我们将这些变量置于代码顶部的想法。
执行逻辑甚至函数表达式也都保留在原处。 例如,在var foo = function bar() { // do something.. } , foo被吊起,而bar函数未被吊起。 它是在执行阶段分配的。
功能首先被提升。
吊装在每个范围内进行。
同一作用域中相同标识符的重复定义确实会造成混淆,尤其是在普通var和函数声明之间。 尝试不做。
您可以在这里看到为什么这是个坏主意:
foo(); //“ b” var a = true;
如果一个) {
函数foo(){console.log(“ a”); }
}
其他{
函数foo(){console.log(“ b”); }
}
这两个foo()声明都悬挂在foo()调用之上。 第二个foo()声明重写了第一个声明,因此b被打印到控制台。