Javascript倒计时结束问题
我有一个for循环,在那里我可以得到倒计时的开始号码。我想在for循环之外使用这个数字,这里是闭包问题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 (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;ifunction 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.
}