1

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

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

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

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

4 回答 4

1

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

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

var testVar = "i'm global";
function example(globalTestVar) {
    alert(globalTestVar); 
    var testVar = "i'm local";
    alert(testVar);   
 }
 example(testVar);     
于 2013-02-24T13:06:04.270 回答
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移动到范围的开头。

于 2013-02-24T13:04:54.440 回答
-1

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

于 2013-02-24T13:07:28.753 回答
-1

试试这个它应该提醒两者,你需要先定义testVar内部函数。

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

     }
         example();     
</script>
于 2013-02-24T13:08:08.117 回答