Javascript变量初始化和声明顺序

时间:2015-05-13 09:30:56

标签: javascript

使用typescript,我发现当我使用数组解构时,它会生成一些不寻常的代码,其中变量初始化在其声明之前,即在下面的示例控制台中显示“undefined”

(function () {
    var _a = 1;
    _c = _a;
    var _c;
})();
console.log(_c);

> ReferenceError: _c is not defined

为什么变量_c不会变为全局?

2 个答案:

答案 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

MDN - var statement

Demystifying JavaScript Variable Scope and Hoisting

JavaScript Hoisting Explained

答案 1 :(得分:0)

函数下的所有变量都是局部变量。