我的Javascript代码出错

我的Javascript代码出错,javascript,Javascript,你有一个数字数组。编写一个函数,将数组转换为返回原始数字的函数数组,因此我们将调用a3,而不是调用[3]。例如: 变换[1,2,3]→ [函数{return 1;},函数{return 2;},函数{return 3;}] 请不要在我们的回答中使用“EVAL”或“新的函数”,因为我们考虑了这些坏的风格。 我不能运行这个,一些我无法发现的错误 var arrayOfNum = [0,1,2]; var arraylength = arrayOfNum.length; for(var i = 0

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

变换[1,2,3]→ [函数{return 1;},函数{return 2;},函数{return 3;}] 请不要在我们的回答中使用“EVAL”或“新的函数”,因为我们考虑了这些坏的风格。 我不能运行这个,一些我无法发现的错误

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;});
}
}
有人能帮我指出这段代码中的错误吗

您没有调用passValue函数,因此在弹出行之后,实际上没有执行任何操作。我甚至不认为该函数可以被调用,因为它在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;} );
    }
}

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


你看起来一点错误都没有,但我想什么都不会发生。你到底想干什么?我在forloop中看到一个从未调用过的函数passValue。

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

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
使用map,您可以获得理想的结果+非常简短和清晰的代码:

arr = [1, 2, 3];
arr = arr.map(function(n) {
    return function() { return n; }
});

你犯了什么错误,先生?@Rahul:这取决于你想让代码做什么。passValue函数的作用是什么?