javascript - 为什么一个值在其自己的范围内重新分配时会变为未定义?

标签 javascript

<分区>

我一直在玩弄一些毫无意义的逻辑和作用域,并注意到一些让我感到困惑的奇怪行为......

        var test = 1;
        (function(){
            console.log(test); //its 1
        })();

        var test = 1;
        (function(){
            console.log(test); //its 1
            test = 2;
        })();

        var test = 1;
        (function(){
            console.log(test); //Uncaught ReferenceError: test is not defined
            var test = 2;
        })();

在下面的示例中,我希望最后一个函数注销 1,直到在该范围内重新分配测试,但它是未定义的,如果我删除作用域声明并重新分配顶级测试,它然后按预期注销 1。

谁能解释为什么最后一个例子 test 变得未定义?

最佳答案

最后一段大致等于

var test = 1;
(function(){
   var test; // it is undefined here as it is not initialized yet
   console.log(test); // undefined
   test = 2; // initialized
   console.log(test); // hence 2
})();

由于变量声明被提升到函数的顶部。因此,当您记录 test 时,它是 undefined 并且覆盖了外部的 test

关于javascript - 为什么一个值在其自己的范围内重新分配时会变为未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28346751/

相关文章:

javascript - 如何在 Babylon.js 中为形状着色?

JavaScript 解析错误 : Unexpected Error

javascript - 将参数传递给 elasticsearch javascript api 搜索请求的回调函数

javascript - 检查 jQuery 是否被内容过滤器阻止

javascript - 在 Javascript 中公开私有(private)变量

javascript - 跳跃元素

javascript - ReactJS 处理组件更改

javascript - 按下 ENTER 键时防止在 Textarea 中换行的代码不起作用

javascript - 在 iOS 上为 javascript 复制/粘贴事件

javascript - jQuery 使用动画创建循环