2017-07-17 52 views
0

如何将匿名函数的值返回到数组中。我已经尝试过这段代码,但它不起作用。哪里是我错了添加匿名函数返回到aray push

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 + ")"; 
     }); 
    } 
+0

为什么不'arr.push(randomColor());'? – Andreas

+0

我已经写了randomcolor(),但我只想尝试匿名函数。谢谢。 –

回答

1

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

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);

1

这里是你如何能做到这一点:

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. 
    } 

注意,在倒数第二行中的两个支架。它们意味着立即执行该功能。

虽然要小心这种模式。很容易让读者与这些代码混淆。你可以使用诸如:

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()); 
} 
+0

是的,它绝对有效。非常感谢。 –

+0

我已经写过函数getRandomColor,但我只是想用匿名函数来尝试它。 –

+0

好的。然后第一个样品为你做这项工作。 – Nisarg

2

无需复杂的:

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) 
}