Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.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_Closures_Countdown - Fatal编程技术网

Javascript倒计时结束问题

Javascript倒计时结束问题,javascript,closures,countdown,Javascript,Closures,Countdown,我有一个for循环,在那里我可以得到倒计时的开始号码。我想在for循环之外使用这个数字,这里是闭包问题 for (var i = 0; i < response.length; i++) { var number = response[i].number; //the number is 10 getNumber(number); }; 但当我尝试这样做时,我得到的是未定义的,而不是10: var globalVariableForNumber = getNumber()

我有一个for循环,在那里我可以得到倒计时的开始号码。我想在for循环之外使用这个数字,这里是闭包问题

for (var i = 0; i < response.length; i++) {
    var number = response[i].number; //the number is 10
    getNumber(number);
};
但当我尝试这样做时,我得到的是未定义的,而不是10:

var globalVariableForNumber = getNumber();
我知道我做错了的是在给变量赋值时调用getNumber而不使用参数,但是我应该怎么做呢

该数字来自一个ajax调用,该调用的响应[i].number中包含更多数字。然后我想用这些数字作为倒计时的开始计时器。因此,如果数字是10,那么我的倒计时将从10开始。 谢谢。

var响应=[ {编号:5}, {编号:6}, {编号:7}, {编号:8}, {编号:9}, {编号:10} ] var数; 对于var i=0;iconsole.loggetNumber 您要做的是创建一个函数,该函数只接受一个参数,并在调用时返回该参数。Return是一种奇特的说法,如果你说foo=bar,那么foo就是bar返回的任何东西

在代码中,不带参数调用getNumber会返回undefined,因为它只返回参数。您应该做的不是返回参数,而是将全局变量设置为:

function getNumber(number) {
    globalVariableForNumber = number;
}
现在,只需运行以下命令即可获得号码:

globalVariableForNumber
范围

当前执行的上下文。价值观和价值观 表达式是可见的,或者可以被引用。如果是变量或 其他表达式不在当前范围内,则不可用 供使用。作用域也可以在层次结构中分层,以便 作用域可以访问父作用域,但反之亦然

函数在JavaScript中充当闭包,从而创建 范围,例如,在 无法从函数外部或其他内部访问函数 功能

考虑以下可声明和调用代码的作用域示例:

function ImInGlobalScope(){ //Function declared in global scope

 //Lets call this block 1
 for (var i = 0; i < response.length; i++) {
    var number = response[i].number; //Inside function scope
    getNumber(number)
 };

 //Lets call this block 2
 function getNumber(number){ //In same scope than for statement
    return number; //block 3
 }

}

var globalVariableForNumber = getNumber();

试着这样做:var-globalVariableForNumber=getNumber不调用函数,而是赋值,这样我们就不会只设置变量的返回值,我不明白。我应该不定义函数,而是创建变量并分配给它getNumber吗?很抱歉,但出于某种原因,这对我来说毫无意义。调用函数不会在其中存储值-您是否希望从响应中提取一个值,或者将响应中的每个条目转换为数字键中的值?只需从该变量globalVariableForNumber=getNumber中省略;我甚至不明白你想做什么。为什么使用for循环?倒计时在哪里,怎么叫?闭包不是这样工作的。它们是在一个函数返回另一个函数时创建的,该函数引用了封闭函数中的一个变量。我仍然得到未定义的数字,这是console.logresponse[I]的结果。数字?是10。当我把console.log这个数字记录在getNumber中时,我仍然得到10。但是当我想在其他任何地方使用变量号时,它是未定义的。是的,但是您正在for循环中记录控制台日志。如果我想要一个名为newVariable的变量并为其赋值,该怎么办?我的意思是在for循环和函数之外,只是一个全局变量。它返回分配给number的任何值。在这种情况下是10。这就是为什么我觉得这很混乱。。。该值在外部范围中定义,因此您可以直接访问它。如果你想从你的范围之外访问它,你可以这样做。。。你能解释一下为什么这个代码能回答这个问题吗?代码唯一的答案是,因为他们不教解决方案。
function ImInGlobalScope(){ //Function declared in global scope

 //Lets call this block 1
 for (var i = 0; i < response.length; i++) {
    var number = response[i].number; //Inside function scope
    getNumber(number)
 };

 //Lets call this block 2
 function getNumber(number){ //In same scope than for statement
    return number; //block 3
 }

}

var globalVariableForNumber = getNumber();
function ImInGlobalScope(){ //Function declared in global scope

 //Lets call this block 1
 for (var i = 0; i < response.length; i++) {
    var number = response[i].number; //Inside function scope
    getNumber(number)
 };

}

 //Lets call this block 2
 function getNumber(number){ //In same scope than for statement
    return number; //block 3
 }

var globalVariableForNumber = getNumber();
 function getNumber(number){ //Number is not being passed so is undefined
    return number; //no variable named number exists in this scope so it will return undefined.
 }