簡體   English   中英

為什么在var之后出現函數變量時未定義?

[英]Why is function variable undefined when var comes after it?

我讀過,一種好的做法是在每個函數的頂部放置一個var語句,該語句定義所有局部變量。 以下代碼說明了為什么這樣做是一個好主意,因為顯然使用變量使用var使其變得未定義。

但是有人可以告訴我為什么會這樣嗎?

<html>
    <head>
        <script type="text/javascript">
            window.onload = function() {
                var a=1;
                function foo() {
                    //a = 2; //outputs 2,2 because this overwrites the external variable value
                    //var a = 2; //outputs 2,1 because the "var" keyword creates a second variable with local scope which doesn't affect the external variable 
                    console.log(a);
                    var a = 3; //ouputs "undefined,1" ???
                }
                foo();
                console.log(a);
            };
        </script>
    </head>
    <body>

    </body>
</html>
function foo() {
  console.log(a);
  var a = 3;
}

相當於

function foo() {
  var a;
  console.log(a);
  a = 3;
}

因為在JavaScript中,變量聲明是懸掛的,但初始化器不是。

您可以通過以下示例看到這確實是正確的:

e = 0;
function foo() {
  e = 1;
  try {
    throw 2;
  } catch (e) {
    var e = 3;
    alert("In catch " + e);
  }
  alert("Before end of function " + e);
}
foo();
alert("Outside function " + e);

哪些警報

趕上3
在功能1結束之前
外部功能0

因為變量聲明被提升,所以函數外部的e不會被e = 1更改,但是e = 3發生在catch內部,因此3不會影響函數末尾的e ,而是覆蓋異常值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM