添加匿名函数 return 到数组推送

Add anonymous function return to array push

如何将匿名函数的值 return 压入数组。我试过这段代码,但它不起作用。我哪里错了

for (var i = 0; i < num; i++) {
        //get ramdom color
        // arr.push(randomColor());
        arr.push(function() {
            //pick a "red" from 0 - 255
            var r = Math.floor(Math.random() * 256);
            //green 0 - 255
            var g = Math.floor(Math.random() * 256);
            //blue 0 -255
            var b = Math.floor(Math.random() * 256);

            return "rgb" + "(" + r + ", " + g + ", " + b + ")";
        });
    }

您可以这样做:

for (var i = 0; i < num; i++) {
        //get ramdom color
        // arr.push(randomColor());
        arr.push(function() {
            //pick a "red" from 0 - 255
            var r = Math.floor(Math.random() * 256);
            //green 0 - 255
            var g = Math.floor(Math.random() * 256);
            //blue 0 -255
            var b = Math.floor(Math.random() * 256);

            return "rgb" + "(" + r + ", " + g + ", " + b + ")";
        }()); // Note the two brackets.
    }

注意倒数第二行的两个括号。它们旨在立即执行该功能。

不过要小心这种模式。很容易将 reader 与此类代码混淆。您可以使用诸如:

function getRandomColor() {
    //pick a "red" from 0 - 255
    var r = Math.floor(Math.random() * 256);
    //green 0 - 255
    var g = Math.floor(Math.random() * 256);
    //blue 0 -255
    var b = Math.floor(Math.random() * 256);

    return "rgb" + "(" + r + ", " + g + ", " + b + ")";
}

for (var i = 0; i < num; i++) {
    //get ramdom color
    // arr.push(randomColor());
    arr.push(getRandomColor());
}

您没有在循环中调用这些函数。

let arr = [];
let num = 3;

for (let i = 0; i < num; i++) {
  arr.push((() => {
    let r = Math.floor(Math.random() * 256);
    let g = Math.floor(Math.random() * 256);
    let b = Math.floor(Math.random() * 256);

    return "rgb" + "(" + r + ", " + g + ", " + b + ")";
  })());
}

console.log(arr);

无需复杂化:

for (var i = 0; i < num; i++) {
    //get ramdom color
    //pick a "red" from 0 - 255
    var r = Math.floor(Math.random() * 256);
    //green 0 - 255
    var g = Math.floor(Math.random() * 256);
    //blue 0 -255
    var b = Math.floor(Math.random() * 256);
    var colour = "rgb" + "(" + r + ", " + g + ", " + b + ")";
    arr.push(colour)
}