Javascript 这是什么意思?引擎故障还是什么?
可能重复:Javascript 这是什么意思?引擎故障还是什么?,javascript,variables,global-variables,var,Javascript,Variables,Global Variables,Var,可能重复: 大家好 我想问一个陌生人。这是代码 var a = "defined"; function f() { alert(a); var a = 5; } f(); var a=“已定义”; 函数f(){ 警报(a); var a=5; } f(); 警报“未定义” 有谁能解释一下我为什么变得“未定义” Fatih..我想这就是所谓的JavaScript。请观看此视频,了解更多信息及其解决方案: 要使其工作,您必须删除var关键字表单变量a: var a = "define
大家好 我想问一个陌生人。这是代码 var a = "defined"; function f() { alert(a); var a = 5; } f(); var a=“已定义”; 函数f(){ 警报(a); var a=5; } f(); 警报“未定义” 有谁能解释一下我为什么变得“未定义” Fatih..我想这就是所谓的JavaScript。请观看此视频,了解更多信息及其解决方案: 要使其工作,您必须删除
var
关键字表单变量a
:
var a = "defined";
function f() {
alert(a);
a = 5;
}
f();
因此,基本上,这是一个可变范围的问题。删除
var
关键字的行为使变量全局可用。因此,这次没有出现错误。在函数中,您将获得一个新的作用域
函数中的var a
声明了一个局部变量a
,它掩盖了全局变量
对a
的分配发生在之后(警报之后),因此在此之前a
是未定义的
令人困惑的是,不管您是否在函数的顶部或任何其他位置(甚至可以在if中)有
var a
声明,这都无关紧要。效果是一样的:它为该范围声明了一个变量(即使对于位于声明之前的代码也是有效的)。这就是为什么jslint建议在顶部声明所有局部变量。基本上是的精确副本,但是,删除var
也可能做不到您想要的,因为现在您正在处理全局变量。(但这并不令人惊讶)有趣。这是我不知道的事情,我很惊讶我还没有意识到这一点。谢谢你的链接。