0

你有一个数字数组。编写一个函数,将数组转换为返回原始数字的函数数组,因此我们将调用 a3,而不是调用 a[3]。例如:

transform([1,2,3]) → [function () {return 1;}, function () {return 2;}, function () {return 3;}] 请不要使用 'eval' 或 'new当我们考虑这些不良风格时,请在您的回答中使用“功能”。

我不能运行这个,我找不到一些错误

var arrayOfNum = [0,1,2];

var arraylength = arrayOfNum.length;

for(var i = 0; i < arraylength; i++){
var hold = arrayOfNum.pop();
function passValue(num){
arrayOfNum.unshift(function(){return hold;});
}
}

谁能帮我指出这段代码中的错误

4

4 回答 4

0

您没有调用该passValue函数,因此在该pop行之后,实际上没有执行任何操作。我认为甚至不能调用该函数,因为它在for循环内的范围应该防止它被绑定到封闭函数。除了尝试重新定义函数 3 次...

var arrayOfNum = [0,1,2];
var arraylength = arrayOfNum.length;

for(var i = 0; i < arraylength; i++){
    var hold = arrayOfNum.pop();
    function passValue(num){
        arrayOfNum.unshift( function(){return hold;} );
    }
}
于 2012-04-05T09:58:07.450 回答
0

如果您使用 Firefox,您可以在错误控制台(工具 -> 错误控制台)中看到 javascript 错误。

你似乎根本没有错误,但我猜什么都没有发生。你到底想做什么?我在 forloop 中看到一个从未调用过的函数 passValue()。

于 2012-04-05T10:00:27.387 回答
0

实际上,你想做什么并不明显。我可能猜想你想用函数替换数字,如果是这样你可以写:

var arrayOfNum = [0,1,2];

var arraylength = arrayOfNum.length;

for(var i = 0; i < arraylength; i++){
    var hold = arrayOfNum.pop();
    function passValue(num){
        arrayOfNum.unshift(function(){return num;});
    }
    passValue(hold);
}

alert(arrayOfNum[0]()); //0
alert(arrayOfNum[1]()); //1
alert(arrayOfNum[2]()); //2
于 2012-04-05T10:13:52.670 回答
0

使用map你可以达到预期的效果 + 非常简短和干净的代码:

arr = [1, 2, 3];
arr = arr.map(function(n) {
    return function() { return n; }
});
于 2012-04-05T11:49:19.573 回答