Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数外部定义的javascript变量为';未定义';职能范围内_Javascript - Fatal编程技术网

函数外部定义的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的建议,即它可能是一个范围问题。