0

数字の配列があります。配列を元の数値を返す関数の配列に変換する関数を作成するため、a[3] を呼び出す代わりに a3 を呼び出します。例えば:

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

実際、あなたが何をしたいのかは明らかではありません。数字を関数に置き換えたいと思うかもしれませんが、そうであれば、次のように書くことができます。

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

マップを使用すると、目的の結果と非常に短くクリーンなコードを実現できます。

arr = [1, 2, 3];
arr = arr.map(function(n) {
    return function() { return n; }
});
于 2012-04-05T11:49:19.573 に答える
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 に答える