var name="Jim";
var func=function(){
alert(name);
var name=true;
}
func();
var name="Jim";
var func=function(){
alert(name);
name=true;
}
func();
两个功能有不同的结果,有人可以给我解释一下吗?
答案 0 :(得分:3)
发生这种情况的原因来自hoisting。函数范围内的变量声明被提升到顶部。这意味着你的第一个功能实际上就是这个
var name="Jim";
var func=function(){
var name;
alert(name);
name=true;
}
func();
这应该更清楚为什么未定义警报。
有关更深入的解释,请参阅"var hoisting"。
因为在执行任何代码之前处理变量声明(和一般声明),所以在代码中的任何地方声明变量等同于在顶部声明它。这也意味着变量可以在声明之前使用。此行为称为“提升”,因为看起来变量声明被移动到函数或全局代码的顶部。
答案 1 :(得分:0)
您的第一个功能相当于:
var name="Jim";
var func=function(){
var name;
alert(name);
name=true;
}
func();
因为变量声明总是由Javascript放在范围的开头。因此,执行alert(name)
时,name
为undefined
。
有关范围的更多信息,请参阅this answer。