SOURCE

function swap(a, i, j) {
    if (i != j) {
        var temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}
function show(a) {
    document.write(a + "<br />");
}
function perm(a) {
    (function fn(n) { //为第n个位置选择元素
        for (let i = n; i < a.length; i++) {
            swap(a, i, n);
            if (n + 1 < a.length - 1) //判断数组中剩余的待全排列的元素是否大于1个
                fn(n + 1); //从第n+1个下标进行全排列
            else
                show(a); //显示一组结果
            swap(a, i, n);
        }
    })(0);
}

perm([1,1,1])
console 命令行工具 X clear

                    
>
console