我可以把所有只需要调用一次的函数都写成 IIFE 吗?

Can I write all the functions that need to be called only one time as IIFE

来自(根据 http://es5.github.io/#x12.4,这似乎是不允许的)

    function a () {};
    a();

    var a = function () {};
    a();

    (function () {}) ();

如果 a() 只被调用一次?看起来更简洁


好的,我会 post 我的代码:

    const qty = []; 
    ((...setAmt) => {
        for (let i of setAmt) {
            qty.push(Math.floor(Math.random() * (i + 1)))
        }
    }) (10, 20, 10, 5, 20, 10, 10, 20, 20, 20);

    const qty = [];
    const generator = (...setAmt) => {
        for (let i of setAmt) {
            qty.push(Math.floor(Math.random() * (i + 1)))
        }
    };
    generator(10, 20, 10, 5, 20, 10, 10, 20, 20, 20);

这是生成一系列0到i之间的随机整数

我还有一些类似情况下只执行一次的其他函数。

可以,但不应该

iifes 可以写得更快,但读起来慢很多,因为你必须阅读整个函数才能弄清楚它做了什么。当错误开始出现时,这可能是一场噩梦。

代码必须可读和可维护,假设您必须阅读某人的数百行代码,您希望看到到处都是命名函数或 iifes 吗?

下面还有一个更好的方法:

    const generateYourPhoneBill = (...args) => [...args].map((v) => Math.floor(Math.random() * (v + 1)));

    const lastMonth = generateYourPhoneBill(10, 20, 10, 5, 20, 10, 10, 20, 20, 20);