function a(){
var h = 1;
function b(){
alert(h);
}
b();
}
a();
Run Code Online (Sandbox Code Playgroud)
警报1 ;
function a(){
var h = 1;
function b(){
if(false){
var h = h * 2;
}
alert(h);
}
b();
}
a();
Run Code Online (Sandbox Code Playgroud)
警报未定义.为什么?
变量声明将移动到它们定义的作用域的顶部,并且不会分配值,直到执行赋值行.所以,你的第二个代码可以理解为
function a() {
var h = 1;
function b() {
var h;
if (false) {
h = h * 2;
}
alert(h);
}
b();
}
a();
Run Code Online (Sandbox Code Playgroud)
即使您已h在if子句中定义,因为JavaScript没有块作用域,变量声明实际上移动到函数的顶部.并且由于if条件不满足,h因此永远不会赋值.这就是它提醒的原因undefined
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |