使用typescript,我发现当我使用数组解构时,它会生成一些不寻常的代码,其中变量初始化在其声明之前,即在下面的示例控制台中显示“undefined”
(function () {
var _a = 1;
_c = _a;
var _c;
})();
console.log(_c);
> ReferenceError: _c is not defined
为什么变量_c不会变为全局?
答案 0 :(得分:1)
在Javascript中,在实际运行任何代码之前,所有变量声明都被提升到声明它们的作用域的顶部。所以你的代码示例:
(function () {
var _a = 1;
_c = _a;
var _c;
})();
console.log(_c);
评估如下:
(function () {
var _a;
var _c;
_a = 1;
_c = _a;
})();
console.log(_c);
因此,_c
在实际引用或使用之前在本地声明,因此它不是隐式全局因为它在引用它的范围内声明,并且提升确保它在开始时声明无论var _c;
声明在哪个范围内,该范围都是如此。
以下是有关吊装概念的一些参考资料:
JavaScript Scoping and Hoisting
答案 1 :(得分:0)
函数下的所有变量都是局部变量。