为什么对于在更高范围内初始化并稍后在当前范围内初始化的变量,我会得到未定义

Why do I get undefined for a variable that is initialized in higher scope and later in current scope?

本文关键字:范围内 初始化 变量 未定义 为什么      更新时间:2023-09-26

为什么在更高范围和稍后在当前范围中初始化的变量未定义?

当前代码输出:第一个"未定义",第二个"我是本地的"。

为什么会发生这种情况?这个问题是什么?这个问题的名称是什么?它背后的概念是什么?

var testVar = "i'm global";
function example( ) {
    alert(testVar); 
    var testVar = "i'm local";
    alert(testVar);   
 }
 example();

您只得到本地testVar,因为当您进入example函数的范围时,您有testVar的声明,所以您覆盖了testVar。在第一个alert中,您应该得到undefined,因为有testVar的声明,但在alert之后。在第二个警报中,您会得到本地值,因为testVar已经定义。

要获得外部变量,只需以不同的方式命名或将其作为参数传递:

var testVar = "i'm global";
function example(globalTestVar) {
    alert(globalTestVar); 
    var testVar = "i'm local";
    alert(testVar);   
 }
 example(testVar);     

您的代码等于:

<script type="text/javascript">
   var testVar = "i'm global";
   function example( ) {
      var testVar;
      alert(testVar); 
      testVar = "i'm local";
      alert(testVar);   
    }
    example();     
</script>

因此,第一个alert局部变量testvar是未定义的。var移动到作用域的开头。

从局部变量中删除var。它使浏览器认为testVar是一个局部变量,在第一次警报时尚未定义。http://jsfiddle.net/N5Yf3/

尝试一下,它应该提醒两者,你需要在函数内定义第一个testVar

 <script type="text/javascript">
    function example( ) {
        var testVar = "i'm global";
        alert(testVar); 
        var testVar = "i'm local";
        alert(testVar);   
     }
         example();     
</script>