使用 typescript ,我发现当我使用数组解构时,它会生成一些不寻常的代码,其中变量初始化先于其声明,即在下面的示例中控制台显示“未定义”
(function () {
var _a = 1;
_c = _a;
var _c;
})();
console.log(_c);
> ReferenceError: _c is not defined
为什么变量_c没有成为全局变量?
最佳答案
在 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
关于Javascript变量初始化和声明顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30210812/