JavaScript 函数范围
JavaScript Function Scope
我有问题,与JavaScript Scope有关:-
var a = 10;
function show() {
alert(a);
var a = 20;
alert(a);
}
show();
alert(a);
上面给我的输出为"未定义"2010
我理解最后两个输出,但是为什么在第一个警报中未定义,我将结果解释为 10、20、10,因为它是一个脚本,它会逐行运行,所以当遇到第一个警报时,它会处理一个全局并用 10 提醒我,但所有这些理论都出错了。
你能解释一下我,实际的理论是什么,我哪里出错了
谢谢
吊装:分散变量的问题
JavaScript 使您能够在函数中的任何位置拥有多个 var 语句,并且它们的行为都好像变量是在函数的顶部声明的。此行为是称为吊装。当您使用变量时,这可能会导致逻辑错误,然后您在函数中进一步声明它。对于 JavaScript,只要变量在相同作用域(相同的函数),它被认为是声明的,即使它在 var 之前使用声明。看看这个例子:
myname = "global"; // global variable
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();
在此示例中,您可能期望第一个 alert() 将提示"全局"和第二个将提示"本地"。这是一个合理的期望,因为在第一个警报,myname 未声明,因此函数可能应该"看到"全局我的姓名。但这不是它的工作原理。第一个警报将显示"未定义"因为 myname 被视为声明为函数的局部变量。(虽然声明在之后。所有变量声明都被提升到顶部功能。因此,为了避免这种类型的混淆,最好预先声明所有变量您打算使用。
前面的代码片段的行为就像是这样实现的一样:
myname = "global"; // global variable
function func() {
var myname; // same as -> var myname = undefined;
alert(myname); // "undefined"
myname = "local";
alert(myname); // "local"
}
func();
查找变量提升,变量定义得到提升初始化不。
相关文章:
- 正在全局范围中查找JavaScript函数
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- 可以't访问JavaScript函数范围中的变量
- 在 Angular 指令中,如何进行回调,其中函数名称位于父范围的变量中
- 我怎样才能创建一个函数expr;t继承词法范围
- 获取给定JavaScript范围内的解析函数
- 为什么在javascript中的模块模式中实现Lazy函数时范围会发生变化
- 如何在JavaScript中使用此函数对范围内的所有数字求和
- 构造函数函数中的自执行函数的OO上下文/范围
- javascript和jQuery的嵌套对象函数中的变量范围
- 对象内部函数内的对象文本的范围
- JavaScript 函数变量范围问题
- 如何触发指令中定义的范围函数
- 范围函数角度的右设置
- 角度控制器范围项作为范围函数的子项
- 在 Angular 指令中的事件处理程序中调用范围函数
- Angular JS 如何从指令模板内容事件调用指令范围函数
- 如何使用混合参数调用父级的范围函数
- 如何从带有参数的指令中调用角度控制器范围函数
- 为什么我的范围函数显示一个未定义的值后,循环应该已经关闭