为什么对于在更高范围内初始化并稍后在当前范围内初始化的变量,我会得到未定义
Why do I get undefined for a variable that is initialized in higher scope and later in current scope?
为什么在更高范围和稍后在当前范围中初始化的变量未定义?
当前代码输出:第一个"未定义",第二个"我是本地的"。
为什么会发生这种情况?这个问题是什么?这个问题的名称是什么?它背后的概念是什么?
var testVar = "i'm global";
function example( ) {
alert(testVar);
var testVar = "i'm local";
alert(testVar);
}
example();
您只得到本地testVar
,因为当您进入example
函数的范围时,您有testVar
的声明,所以您覆盖了testVar
。在第一个alert
中,您应该得到undefined
,因为有testVar
的声明,但在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>
相关文章:
- 如何在初始化过程中引用同一对象内的对象字段
- 如何销毁数据表的首次初始化(模态内的数据表)
- 用于未初始化的局部变量的javascript变量范围
- 使用angularjs范围变量初始化javascript变量
- 如何在使用 AngularJS ng-repeat 时初始化本地范围内的属性
- Ember.js - 在车把内初始化的视图中调用方法
- JavaScript 中未初始化变量的范围
- 最小化和保护对象内或全局范围内的函数名称
- 多个ng初始化范围问题
- 角度范围数据在更新时不绑定到视图,但在初始化时绑定
- 重新初始化内联编辑器时的IE问题
- 为什么 AngularJS 不使用内联<脚本>初始化
- 虚拟键盘(Keith Wood)在JQuery对话框内的文本框上初始化时,每次点击都会自动关闭
- jqGrid内联导航器未初始化
- 基础5 ajax范围滑块(重新)初始化设置
- 如何初始化名称空间内的所有方法?初始化所有方法
- 是在模型内还是在其他地方初始化主干视图?
- 为了严格的内容安全策略,将内联javascript初始化逻辑从html中分离出来
- 在本地范围内初始化 JavaScript 变量
- 为什么对于在更高范围内初始化并稍后在当前范围内初始化的变量,我会得到未定义