原始思维:
Array.prototype.uniq = function() {

var args = this;
var len = args.length;
var result = [];
//定义一个执行一次的函数:
function once(fn) {
    var target = true;
    return function() {
        if (target) {
            fn();
            target = false;
        }
        return undefined;
    }
};
const insertFunction = once(() => {
    result.push(args[i]);
});
for (var i = 0; i < len; i++) {
    if (args.indexOf(args[i]) != -1) { //NaN不等于任何,包括他自身,所以args.indexOf(args[i])遇到NaN永远返回-1
        if (i === args.indexOf(args[i])) {
            result.push(args[i]);
        }
    } else {
        insertFunction();
    }

}
return result;

}
优化后(完全可以利用flag,不用定义只一次执行函数):
Array.prototype.uniq = function() {

var args = this;
var len = args.length;
var result = [];
var flag = true;
for (var i = 0; i < len; i++) {
    if (args.indexOf(args[i]) != -1) { //NaN不等于任何,包括他自身,所以args.indexOf(args[i])遇到NaN永远返回-1
        if (i === args.indexOf(args[i])) {
            result.push(args[i]);
        }
    } else if (flag) {
        result.push(args[i]);
        flag = false;
    }

}
return result

}