我的Javascript代码出错

时间:2012-04-05 09:56:14

标签: javascript

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

transform([1,2,3])→[function(){return 1;},function(){return 2;},function(){return 3;}] 在我们考虑这些不好的风格时,请不要在答案中使用'eval'或'new Function'。

我无法运行此错误,我无法找到一些错误

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 个答案:

答案 0 :(得分: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;} );
    }
}

答案 1 :(得分:0)

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

你似乎根本没有错误,但我猜不会发生任何事情。无论如何你还想做什么?我在forloop里面看到一个函数passValue(),它永远不会被调用。

答案 2 :(得分: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

答案 3 :(得分:0)

使用 map ,您可以获得所需的结果+非常简短的代码:

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