为什么对于在更高范围和稍后在当前范围初始化的变量未定义?
当前代码输出:第一个“未定义”和第二个“我是本地的”。
为什么会这样?这是什么问题,这个问题的名称是什么?它背后的概念是什么?
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>