为什么我对在较高范围内和以后在当前范围内初始化的变量进行了未定义?

时间:2013-02-24 13:00:30

标签: javascript

为什么我对在较高范围内和以后在当前范围内初始化的变量进行了未定义?

当前代码输出:首先是“undefined”,第二个是“我是本地的”。

为什么会这样?这是什么问题,这个问题的名称是什么?它背后的概念是什么?

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

4 个答案:

答案 0 :(得分:1)

您只获得本地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);     

答案 1 :(得分:0)

您的代码相当于:

<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被移到范围的开头。

答案 2 :(得分:-1)

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

答案 3 :(得分:-1)

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

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

     }
         example();     
</script>