我有一个for循环,我得到倒计时的起始编号。我想在for循环之外使用那个数字,这就是闭包问题。
for (var i = 0; i < response.length; i++) {
var number = response[i].number; //the number is 10
getNumber(number);
};
所以我认为我应该调用一个返回该数字的函数,以便我可以在其他地方使用它:
function getNumber(number) {
return number;
}
但是当我尝试这样做时,我得到一个未定义而不是10:
var globalVariableForNumber = getNumber();
我知道我做错了是在为我的变量赋值时调用没有参数的getNumber(),但我该怎么做呢?
该号码来自ajax调用,其中包含更多数字(response [i] .number)。然后我想用这些数字作为倒计时的开始计时器。所以,如果数字是10,那么我的倒计时将从10开始。 谢谢。
答案 0 :(得分:0)
var response = [
{number:5},
{number:6},
{number:7},
{number:8},
{number:9},
{number:10}
]
var number;
for (var i = 0; i < response.length; i++) {
number = response[i].number; //the number is 10
console.log(getNumber());
};
function getNumber() {
return number;
}
// try it again later...
console.log(getNumber());
同样,你应该直接拨打号码。但是出于这个问题的目的,你必须在更高的范围内声明number
。
答案 1 :(得分:0)
您正在做的是创建一个只接受一个参数的函数,并在调用该参数时返回该参数。返回是一种奇特的说法,如果您说foo=bar()
,那么foo
就是bar()
返回的内容。
在您的代码中,调用没有参数的getNumber()
会返回undefined
,因为它只返回参数。你应该做的不是返回参数,而是像这样设置全局变量:
function getNumber(number) {
globalVariableForNumber = number;
}
现在,通过运行来获取号码:
globalVariableForNumber
答案 2 :(得分:0)
范围
当前的执行环境。价值观和背景 表达式是“可见的”,或者可以被引用。如果变量或 其他表达式不是“在当前范围内”,则它不可用 用来。范围也可以分层次结构,以便孩子 范围可以访问父范围,但反之亦然。
一个函数在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();
使用此示例,getNumber未定义,因为它属于ImInGlobalScope()范围。考虑代码范围的另一种情况。
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();
我相信以上是你的场景:getNumber
在全局范围内,但是数字是ImInGlobalScope()。
所以当你打电话给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.
}