为什么对于在更高范围和稍后在当前范围初始化的变量未定义?
当前代码输出:第一个“未定义”和第二个“我是本地的”。
为什么会这样?这是什么问题,这个问题的名称是什么?它背后的概念是什么?
var testVar = "i'm global";
function example( ) {
alert(testVar);
var testVar = "i'm local";
alert(testVar);
}
example();
为什么对于在更高范围和稍后在当前范围初始化的变量未定义?
当前代码输出:第一个“未定义”和第二个“我是本地的”。
为什么会这样?这是什么问题,这个问题的名称是什么?它背后的概念是什么?
var testVar = "i'm global";
function example( ) {
alert(testVar);
var testVar = "i'm local";
alert(testVar);
}
example();
你只得到本地的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);
您的代码相当于:
<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移动到范围的开头。
var从局部变量中删除。它使浏览器认为testVar一个局部变量,在第一次警报时未定义。
http://jsfiddle.net/N5Yf3/
试试这个它应该提醒两者,你需要先定义testVar内部函数。
<script type="text/javascript">
function example( ) {
var testVar = "i'm global";
alert(testVar);
var testVar = "i'm local";
alert(testVar);
}
example();
</script>