函数外部定义的javascript变量为';未定义';职能范围内
为什么在下面的代码段中函数外部定义的javascript变量为';未定义';职能范围内,javascript,Javascript,为什么在下面的代码段中MM\u SYSTEM\u RESTART\u SECONDS未定义 如果var MM\u系统重新启动\u秒=40放在功能内,然后MM\u系统重新启动秒数是40,但如果在功能外, 然后MM\u系统\u重启\u秒总是未定义 var MM_SYSTEM_RESTART_SECONDS = 40; function wait_until_MM_restarts() { restart_timeout_start_seconds = get_cookie( "resta
MM\u SYSTEM\u RESTART\u SECONDS
未定义
如果var MM\u系统重新启动\u秒=40代码>放在功能内,然后MM\u系统重新启动秒数
是40
,但如果在功能外,
然后MM\u系统\u重启\u秒
总是未定义
var MM_SYSTEM_RESTART_SECONDS = 40;
function wait_until_MM_restarts()
{
restart_timeout_start_seconds = get_cookie( "restart_timeout_start_seconds" )
elapsed_restart_seconds = elapsed_seconds( restart_timeout_start_seconds )
append_debug_message( elapsed_restart_seconds + "/" + MM_SYSTEM_RESTART_SECONDS )
if( elapsed_restart_seconds > MM_SYSTEM_RESTART_SECONDS )
这只咬了我一口。如果在变量声明之前/之上调用函数,则变量可能未定义
比如说
f("before");
var value = 99;
function f(msg)
{
alert("msg=" + msg + " value=" + value);
}
f("after");
结果:
msg=before value=undefined
msg=after value=99
不应该这样。我可以想到一些可能会导致这种效果的事情……但必须看看函数的其余部分才能知道。提供可以运行的代码片段来演示问题通常是一个好主意。我认为您必须提供更多的上下文。更好的办法是制作一个演示。我倾向于避免使用全局。我理解你对为什么会发生这种情况的兴趣,这是一个好问题(+1)。但是,我会将MM_SYSTEM_RESTART_SECONDS作为参数传递到wait_until_MM_restarts()函数中。很可能MM_SYSTEM_RESTART_SECONDS
是在其他一些范围(在其他一些函数中)中定义的,并且此函数不可用,因为正如您在此处所示,它可以很好地工作。在演示中,它似乎可以工作:我支持@jfriend00的建议,即它可能是一个范围问题。