如果在上层作用域中声明变量,则变量在局部作用域中是未定义的,并且在未执行的语句中在局部作用域中声明同名的变量
Variable is undefined in local scope if declared in upper scope and a var with same name is declared in local scope in an unexecuted statement
function a(){
var h = 1;
function b(){
alert(h);
}
b();
}
a();
1 <<p>警报strong> , function a(){
var h = 1;
function b(){
if(false){
var h = h * 2;
}
alert(h);
}
b();
}
a();
<<p>警报strong>定义。为什么? 变量声明被移到定义它们的作用域的顶部,并且不赋值,直到执行赋值行。因此,第二个代码可以理解为
function a() {
var h = 1;
function b() {
var h;
if (false) {
h = h * 2;
}
alert(h);
}
b();
}
a();
即使你已经在if
子句中定义了h
,由于JavaScript没有块作用域,变量声明实际上被移到了函数的顶部。由于if
条件不满足,h
不赋值。这就是为什么它警告undefined
函数作用域中的变量在整个函数中都处于作用域中。var
是否在块内并不重要。所以这:
function b(){
if(false){
var h = h * 2;
}
alert(h);
}
等价于:
function b(){
var h;
if(false){
h = h * 2;
}
alert(h);
}
周围的函数也有一个名为h
的变量。
您正在使用'var '声明'h' .删除'var '的第二个实例,如下所示:
function a(){
var h = 1;
function b(){
if(false){
h = h * 2;
}
alert(h);
}
b();
}
a();
相关文章:
- 当我更新另一个作用域变量时,作用域变量会自动更新
- 如何在隔离作用域指令中访问此作用域变量
- 正在向构造函数添加作用域变量
- 如何在angularjs中将多个作用域变量传递到自定义指令中
- 作用域变量未从状态父控制器继承到子控制器
- 插槽:访问作用域变量
- 在另一个作用域变量中使用AngularJS作用域变量
- 在Angular.js中通过检查作用域变量进行过滤
- 如何更新作为属性传入的作用域变量
- Node.js中的垃圾收集作用域-变量将保持设置状态多长时间
- 从$http.get调用更新Angular作用域变量
- AngularJS ui路由器:访问子作用域变量
- 访问AngularJS中函数中的作用域变量
- 为什么Angular 1.5双向绑定在将作用域变量传递给组件绑定时失败
- 修改作用域变量后,未更新作用域绑定
- 控制器作用域变量在刷新之前未加载
- 将Angular作用域变量的字符串描述传递给指令
- 将内部作用域变量绑定到外部“模板”
- 无法在 $.post 回调中设置作用域变量
- 如何从在 JS 中用作参数的匿名函数中分配外部作用域变量