[英]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.