我读到一个好的做法是在每个函数的顶部放置一个定义所有局部变量的 var 语句。下面的代码显示了为什么这是一个好主意,因为显然是一个 varafter使用变量使其未定义。
但有人可以告诉我吗why是这样吗?
<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
so the 3
不影响e
在函数末尾,而不是覆盖异常值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)