JS基础-事件补充

实习的话!尽力而为!努力提升自己!希望毕业了以后能够挣多多的钱!

JS多个事件(如:onclick)只执行最后一个事件!一个按钮上有多个事件,只执行最后一个!这个时候使用addEventListener事件!
但是,onclick–>click
多个会顺从执行!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<button id="btn">按钮</button>
<script>
    window.onload = function (ev) {
        var btn = document.getElementById('btn');
        /*btn.onclick = function (ev1) {
            window.location.href = 'https://baike.baidu.com/';
        }*/
        btn.addEventListener('click',function (ev1) {
            console.log(111);
        })
        btn.addEventListener('click',function (ev1) {
            console.log(222);
        })
    }
</script>
</body>
</html>

Underscore是一个JavaScript实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象。
https://underscorejs.net/ (中文网-建议使用!)
http://underscorejs.org/ (英文网ESM和UMD不太懂!)

下面的内容是中文网上下载的underscore-min.js文件

//     Underscore.js 1.9.1
//     http://underscorejs.org
//     (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
//     Underscore may be freely distributed under the MIT license.
!function () {
    var n = "object" == typeof self && self.self === self && self || "object" == typeof global && global.global === global && global || this || {},
        r = n._, e = Array.prototype, o = Object.prototype, s = "undefined" != typeof Symbol ? Symbol.prototype : null,
        u = e.push, c = e.slice, p = o.toString, i = o.hasOwnProperty, t = Array.isArray, a = Object.keys,
        l = Object.create, f = function () {
        }, h = function (n) {
            return n instanceof h ? n : this instanceof h ? void (this._wrapped = n) : new h(n)
        };
    "undefined" == typeof exports || exports.nodeType ? n._ = h : ("undefined" != typeof module && !module.nodeType && module.exports && (exports = module.exports = h), exports._ = h), h.VERSION = "1.9.1";
    var v, y = function (u, i, n) {
        if (void 0 === i) return u;
        switch (null == n ? 3 : n) {
            case 1:
                return function (n) {
                    return u.call(i, n)
                };
            case 3:
                return function (n, r, t) {
                    return u.call(i, n, r, t)
                };
            case 4:
                return function (n, r, t, e) {
                    return u.call(i, n, r, t, e)
                }
        }
        return function () {
            return u.apply(i, arguments)
        }
    }, d = function (n, r, t) {
        return h.iteratee !== v ? h.iteratee(n, r) : null == n ? h.identity : h.isFunction(n) ? y(n, r, t) : h.isObject(n) && !h.isArray(n) ? h.matcher(n) : h.property(n)
    };
    h.iteratee = v = function (n, r) {
        return d(n, r, 1 / 0)
    };
    var g = function (u, i) {
        return i = null == i ? u.length - 1 : +i, function () {
            for (var n = Math.max(arguments.length - i, 0), r = Array(n), t = 0; t < n; t++) r[t] = arguments[t + i];
            switch (i) {
                case 0:
                    return u.call(this, r);
                case 1:
                    return u.call(this, arguments[0], r);
                case 2:
                    return u.call(this, arguments[0], arguments[1], r)
            }
            var e = Array(i + 1);
            for (t = 0; t < i; t++) e[t] = arguments[t];
            return e[i] = r, u.apply(this, e)
        }
    }, m = function (n) {
        if (!h.isObject(n)) return {};
        if (l) return l(n);
        f.prototype = n;
        var r = new f;
        return f.prototype = null, r
    }, b = function (r) {
        return function (n) {
            return null == n ? void 0 : n[r]
        }
    }, j = function (n, r) {
        return null != n && i.call(n, r)
    }, x = function (n, r) {
        for (var t = r.length, e = 0; e < t; e++) {
            if (null == n) return;
            n = n[r[e]]
        }
        return t ? n : void 0
    }, _ = Math.pow(2, 53) - 1, A = b("length"), w = function (n) {
        var r = A(n);
        return "number" == typeof r && 0 <= r && r <= _
    };
    h.each = h.forEach = function (n, r, t) {
        var e, u;
        if (r = y(r, t), w(n)) for (e = 0, u = n.length; e < u; e++) r(n[e], e, n); else {
            var i = h.keys(n);
            for (e = 0, u = i.length; e < u; e++) r(n[i[e]], i[e], n)
        }
        return n
    }, h.map = h.collect = function (n, r, t) {
        r = d(r, t);
        for (var e = !w(n) && h.keys(n), u = (e || n).length, i = Array(u), o = 0; o < u; o++) {
            var a = e ? e[o] : o;
            i[o] = r(n[a], a, n)
        }
        return i
    };
    var O = function (c) {
        return function (n, r, t, e) {
            var u = 3 <= arguments.length;
            return function (n, r, t, e) {
                var u = !w(n) && h.keys(n), i = (u || n).length, o = 0 < c ? 0 : i - 1;
                for (e || (t = n[u ? u[o] : o], o += c); 0 <= o && o < i; o += c) {
                    var a = u ? u[o] : o;
                    t = r(t, n[a], a, n)
                }
                return t
            }(n, y(r, e, 4), t, u)
        }
    };
    h.reduce = h.foldl = h.inject = O(1), h.reduceRight = h.foldr = O(-1), h.find = h.detect = function (n, r, t) {
        var e = (w(n) ? h.findIndex : h.findKey)(n, r, t);
        if (void 0 !== e && -1 !== e) return n[e]
    }, h.filter = h.select = function (n, e, r) {
        var u = [];
        return e = d(e, r), h.each(n, function (n, r, t) {
            e(n, r, t) && u.push(n)
        }), u
    }, h.reject = function (n, r, t) {
        return h.filter(n, h.negate(d(r)), t)
    }, h.every = h.all = function (n, r, t) {
        r = d(r, t);
        for (var e = !w(n) && h.keys(n), u = (e || n).length, i = 0; i < u; i++) {
            var o = e ? e[i] : i;
            if (!r(n[o], o, n)) return !1
        }
        return !0
    }, h.some = h.any = function (n, r, t) {
        r = d(r, t);
        for (var e = !w(n) && h.keys(n), u = (e || n).length, i = 0; i < u; i++) {
            var o = e ? e[i] : i;
            if (r(n[o], o, n)) return !0
        }
        return !1
    }, h.contains = h.includes = h.include = function (n, r, t, e) {
        return w(n) || (n = h.values(n)), ("number" != typeof t || e) && (t = 0), 0 <= h.indexOf(n, r, t)
    }, h.invoke = g(function (n, t, e) {
        var u, i;
        return h.isFunction(t) ? i = t : h.isArray(t) && (u = t.slice(0, -1), t = t[t.length - 1]), h.map(n, function (n) {
            var r = i;
            if (!r) {
                if (u && u.length && (n = x(n, u)), null == n) return;
                r = n[t]
            }
            return null == r ? r : r.apply(n, e)
        })
    }), h.pluck = function (n, r) {
        return h.map(n, h.property(r))
    }, h.where = function (n, r) {
        return h.filter(n, h.matcher(r))
    }, h.findWhere = function (n, r) {
        return h.find(n, h.matcher(r))
    }, h.max = function (n, e, r) {
        var t, u, i = -1 / 0, o = -1 / 0;
        if (null == e || "number" == typeof e && "object" != typeof n[0] && null != n) for (var a = 0, c = (n = w(n) ? n : h.values(n)).length; a < c; a++) null != (t = n[a]) && i < t && (i = t); else e = d(e, r), h.each(n, function (n, r, t) {
            u = e(n, r, t), (o < u || u === -1 / 0 && i === -1 / 0) && (i = n, o = u)
        });
        return i
    }, h.min = function (n, e, r) {
        var t, u, i = 1 / 0, o = 1 / 0;
        if (null == e || "number" == typeof e && "object" != typeof n[0] && null != n) for (var a = 0, c = (n = w(n) ? n : h.values(n)).length; a < c; a++) null != (t = n[a]) && t < i && (i = t); else e = d(e, r), h.each(n, function (n, r, t) {
            ((u = e(n, r, t)) < o || u === 1 / 0 && i === 1 / 0) && (i = n, o = u)
        });
        return i
    }, h.shuffle = function (n) {
        return h.sample(n, 1 / 0)
    }, h.sample = function (n, r, t) {
        if (null == r || t) return w(n) || (n = h.values(n)), n[h.random(n.length - 1)];
        var e = w(n) ? h.clone(n) : h.values(n), u = A(e);
        r = Math.max(Math.min(r, u), 0);
        for (var i = u - 1, o = 0; o < r; o++) {
            var a = h.random(o, i), c = e[o];
            e[o] = e[a], e[a] = c
        }
        return e.slice(0, r)
    }, h.sortBy = function (n, e, r) {
        var u = 0;
        return e = d(e, r), h.pluck(h.map(n, function (n, r, t) {
            return {value: n, index: u++, criteria: e(n, r, t)}
        }).sort(function (n, r) {
            var t = n.criteria, e = r.criteria;
            if (t !== e) {
                if (e < t || void 0 === t) return 1;
                if (t < e || void 0 === e) return -1
            }
            return n.index - r.index
        }), "value")
    };
    var k = function (o, r) {
        return function (e, u, n) {
            var i = r ? [[], []] : {};
            return u = d(u, n), h.each(e, function (n, r) {
                var t = u(n, r, e);
                o(i, n, t)
            }), i
        }
    };
    h.groupBy = k(function (n, r, t) {
        j(n, t) ? n[t].push(r) : n[t] = [r]
    }), h.indexBy = k(function (n, r, t) {
        n[t] = r
    }), h.countBy = k(function (n, r, t) {
        j(n, t) ? n[t]++ : n[t] = 1
    });
    var S = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
    h.toArray = function (n) {
        return n ? h.isArray(n) ? c.call(n) : h.isString(n) ? n.match(S) : w(n) ? h.map(n, h.identity) : h.values(n) : []
    }, h.size = function (n) {
        return null == n ? 0 : w(n) ? n.length : h.keys(n).length
    }, h.partition = k(function (n, r, t) {
        n[t ? 0 : 1].push(r)
    }, !0), h.first = h.head = h.take = function (n, r, t) {
        return null == n || n.length < 1 ? null == r ? void 0 : [] : null == r || t ? n[0] : h.initial(n, n.length - r)
    }, h.initial = function (n, r, t) {
        return c.call(n, 0, Math.max(0, n.length - (null == r || t ? 1 : r)))
    }, h.last = function (n, r, t) {
        return null == n || n.length < 1 ? null == r ? void 0 : [] : null == r || t ? n[n.length - 1] : h.rest(n, Math.max(0, n.length - r))
    }, h.rest = h.tail = h.drop = function (n, r, t) {
        return c.call(n, null == r || t ? 1 : r)
    }, h.compact = function (n) {
        return h.filter(n, Boolean)
    };
    var M = function (n, r, t, e) {
        for (var u = (e = e || []).length, i = 0, o = A(n); i < o; i++) {
            var a = n[i];
            if (w(a) && (h.isArray(a) || h.isArguments(a))) if (r) for (var c = 0, l = a.length; c < l;) e[u++] = a[c++]; else M(a, r, t, e), u = e.length; else t || (e[u++] = a)
        }
        return e
    };
    h.flatten = function (n, r) {
        return M(n, r, !1)
    }, h.without = g(function (n, r) {
        return h.difference(n, r)
    }), h.uniq = h.unique = function (n, r, t, e) {
        h.isBoolean(r) || (e = t, t = r, r = !1), null != t && (t = d(t, e));
        for (var u = [], i = [], o = 0, a = A(n); o < a; o++) {
            var c = n[o], l = t ? t(c, o, n) : c;
            r && !t ? (o && i === l || u.push(c), i = l) : t ? h.contains(i, l) || (i.push(l), u.push(c)) : h.contains(u, c) || u.push(c)
        }
        return u
    }, h.union = g(function (n) {
        return h.uniq(M(n, !0, !0))
    }), h.intersection = function (n) {
        for (var r = [], t = arguments.length, e = 0, u = A(n); e < u; e++) {
            var i = n[e];
            if (!h.contains(r, i)) {
                var o;
                for (o = 1; o < t && h.contains(arguments[o], i); o++) ;
                o === t && r.push(i)
            }
        }
        return r
    }, h.difference = g(function (n, r) {
        return r = M(r, !0, !0), h.filter(n, function (n) {
            return !h.contains(r, n)
        })
    }), h.unzip = function (n) {
        for (var r = n && h.max(n, A).length || 0, t = Array(r), e = 0; e < r; e++) t[e] = h.pluck(n, e);
        return t
    }, h.zip = g(h.unzip), h.object = function (n, r) {
        for (var t = {}, e = 0, u = A(n); e < u; e++) r ? t[n[e]] = r[e] : t[n[e][0]] = n[e][1];
        return t
    };
    var F = function (i) {
        return function (n, r, t) {
            r = d(r, t);
            for (var e = A(n), u = 0 < i ? 0 : e - 1; 0 <= u && u < e; u += i) if (r(n[u], u, n)) return u;
            return -1
        }
    };
    h.findIndex = F(1), h.findLastIndex = F(-1), h.sortedIndex = function (n, r, t, e) {
        for (var u = (t = d(t, e, 1))(r), i = 0, o = A(n); i < o;) {
            var a = Math.floor((i + o) / 2);
            t(n[a]) < u ? i = a + 1 : o = a
        }
        return i
    };
    var E = function (i, o, a) {
        return function (n, r, t) {
            var e = 0, u = A(n);
            if ("number" == typeof t) 0 < i ? e = 0 <= t ? t : Math.max(t + u, e) : u = 0 <= t ? Math.min(t + 1, u) : t + u + 1; else if (a && t && u) return n[t = a(n, r)] === r ? t : -1;
            if (r != r) return 0 <= (t = o(c.call(n, e, u), h.isNaN)) ? t + e : -1;
            for (t = 0 < i ? e : u - 1; 0 <= t && t < u; t += i) if (n[t] === r) return t;
            return -1
        }
    };
    h.indexOf = E(1, h.findIndex, h.sortedIndex), h.lastIndexOf = E(-1, h.findLastIndex), h.range = function (n, r, t) {
        null == r && (r = n || 0, n = 0), t || (t = r < n ? -1 : 1);
        for (var e = Math.max(Math.ceil((r - n) / t), 0), u = Array(e), i = 0; i < e; i++, n += t) u[i] = n;
        return u
    }, h.chunk = function (n, r) {
        if (null == r || r < 1) return [];
        for (var t = [], e = 0, u = n.length; e < u;) t.push(c.call(n, e, e += r));
        return t
    };
    var N = function (n, r, t, e, u) {
        if (!(e instanceof r)) return n.apply(t, u);
        var i = m(n.prototype), o = n.apply(i, u);
        return h.isObject(o) ? o : i
    };
    h.bind = g(function (r, t, e) {
        if (!h.isFunction(r)) throw new TypeError("Bind must be called on a function");
        var u = g(function (n) {
            return N(r, u, t, this, e.concat(n))
        });
        return u
    }), h.partial = g(function (u, i) {
        var o = h.partial.placeholder, a = function () {
            for (var n = 0, r = i.length, t = Array(r), e = 0; e < r; e++) t[e] = i[e] === o ? arguments[n++] : i[e];
            for (; n < arguments.length;) t.push(arguments[n++]);
            return N(u, a, this, this, t)
        };
        return a
    }), (h.partial.placeholder = h).bindAll = g(function (n, r) {
        var t = (r = M(r, !1, !1)).length;
        if (t < 1) throw new Error("bindAll must be passed function names");
        for (; t--;) {
            var e = r[t];
            n[e] = h.bind(n[e], n)
        }
    }), h.memoize = function (e, u) {
        var i = function (n) {
            var r = i.cache, t = "" + (u ? u.apply(this, arguments) : n);
            return j(r, t) || (r[t] = e.apply(this, arguments)), r[t]
        };
        return i.cache = {}, i
    }, h.delay = g(function (n, r, t) {
        return setTimeout(function () {
            return n.apply(null, t)
        }, r)
    }), h.defer = h.partial(h.delay, h, 1), h.throttle = function (t, e, u) {
        var i, o, a, c, l = 0;
        u || (u = {});
        var f = function () {
            l = !1 === u.leading ? 0 : h.now(), i = null, c = t.apply(o, a), i || (o = a = null)
        }, n = function () {
            var n = h.now();
            l || !1 !== u.leading || (l = n);
            var r = e - (n - l);
            return o = this, a = arguments, r <= 0 || e < r ? (i && (clearTimeout(i), i = null), l = n, c = t.apply(o, a), i || (o = a = null)) : i || !1 === u.trailing || (i = setTimeout(f, r)), c
        };
        return n.cancel = function () {
            clearTimeout(i), l = 0, i = o = a = null
        }, n
    }, h.debounce = function (t, e, u) {
        var i, o, a = function (n, r) {
            i = null, r && (o = t.apply(n, r))
        }, n = g(function (n) {
            if (i && clearTimeout(i), u) {
                var r = !i;
                i = setTimeout(a, e), r && (o = t.apply(this, n))
            } else i = h.delay(a, e, this, n);
            return o
        });
        return n.cancel = function () {
            clearTimeout(i), i = null
        }, n
    }, h.wrap = function (n, r) {
        return h.partial(r, n)
    }, h.negate = function (n) {
        return function () {
            return !n.apply(this, arguments)
        }
    }, h.compose = function () {
        var t = arguments, e = t.length - 1;
        return function () {
            for (var n = e, r = t[e].apply(this, arguments); n--;) r = t[n].call(this, r);
            return r
        }
    }, h.after = function (n, r) {
        return function () {
            if (--n < 1) return r.apply(this, arguments)
        }
    }, h.before = function (n, r) {
        var t;
        return function () {
            return 0 < --n && (t = r.apply(this, arguments)), n <= 1 && (r = null), t
        }
    }, h.once = h.partial(h.before, 2), h.restArguments = g;
    var I = !{toString: null}.propertyIsEnumerable("toString"),
        T = ["valueOf", "isPrototypeOf", "toString", "propertyIsEnumerable", "hasOwnProperty", "toLocaleString"],
        B = function (n, r) {
            var t = T.length, e = n.constructor, u = h.isFunction(e) && e.prototype || o, i = "constructor";
            for (j(n, i) && !h.contains(r, i) && r.push(i); t--;) (i = T[t]) in n && n[i] !== u[i] && !h.contains(r, i) && r.push(i)
        };
    h.keys = function (n) {
        if (!h.isObject(n)) return [];
        if (a) return a(n);
        var r = [];
        for (var t in n) j(n, t) && r.push(t);
        return I && B(n, r), r
    }, h.allKeys = function (n) {
        if (!h.isObject(n)) return [];
        var r = [];
        for (var t in n) r.push(t);
        return I && B(n, r), r
    }, h.values = function (n) {
        for (var r = h.keys(n), t = r.length, e = Array(t), u = 0; u < t; u++) e[u] = n[r[u]];
        return e
    }, h.mapObject = function (n, r, t) {
        r = d(r, t);
        for (var e = h.keys(n), u = e.length, i = {}, o = 0; o < u; o++) {
            var a = e[o];
            i[a] = r(n[a], a, n)
        }
        return i
    }, h.pairs = function (n) {
        for (var r = h.keys(n), t = r.length, e = Array(t), u = 0; u < t; u++) e[u] = [r[u], n[r[u]]];
        return e
    }, h.invert = function (n) {
        for (var r = {}, t = h.keys(n), e = 0, u = t.length; e < u; e++) r[n[t[e]]] = t[e];
        return r
    }, h.functions = h.methods = function (n) {
        var r = [];
        for (var t in n) h.isFunction(n[t]) && r.push(t);
        return r.sort()
    };
    var R = function (c, l) {
        return function (n) {
            var r = arguments.length;
            if (l && (n = Object(n)), r < 2 || null == n) return n;
            for (var t = 1; t < r; t++) for (var e = arguments[t], u = c(e), i = u.length, o = 0; o < i; o++) {
                var a = u[o];
                l && void 0 !== n[a] || (n[a] = e[a])
            }
            return n
        }
    };
    h.extend = R(h.allKeys), h.extendOwn = h.assign = R(h.keys), h.findKey = function (n, r, t) {
        r = d(r, t);
        for (var e, u = h.keys(n), i = 0, o = u.length; i < o; i++) if (r(n[e = u[i]], e, n)) return e
    };
    var q, K, z = function (n, r, t) {
        return r in t
    };
    h.pick = g(function (n, r) {
        var t = {}, e = r[0];
        if (null == n) return t;
        h.isFunction(e) ? (1 < r.length && (e = y(e, r[1])), r = h.allKeys(n)) : (e = z, r = M(r, !1, !1), n = Object(n));
        for (var u = 0, i = r.length; u < i; u++) {
            var o = r[u], a = n[o];
            e(a, o, n) && (t[o] = a)
        }
        return t
    }), h.omit = g(function (n, t) {
        var r, e = t[0];
        return h.isFunction(e) ? (e = h.negate(e), 1 < t.length && (r = t[1])) : (t = h.map(M(t, !1, !1), String), e = function (n, r) {
            return !h.contains(t, r)
        }), h.pick(n, e, r)
    }), h.defaults = R(h.allKeys, !0), h.create = function (n, r) {
        var t = m(n);
        return r && h.extendOwn(t, r), t
    }, h.clone = function (n) {
        return h.isObject(n) ? h.isArray(n) ? n.slice() : h.extend({}, n) : n
    }, h.tap = function (n, r) {
        return r(n), n
    }, h.isMatch = function (n, r) {
        var t = h.keys(r), e = t.length;
        if (null == n) return !e;
        for (var u = Object(n), i = 0; i < e; i++) {
            var o = t[i];
            if (r[o] !== u[o] || !(o in u)) return !1
        }
        return !0
    }, q = function (n, r, t, e) {
        if (n === r) return 0 !== n || 1 / n == 1 / r;
        if (null == n || null == r) return !1;
        if (n != n) return r != r;
        var u = typeof n;
        return ("function" === u || "object" === u || "object" == typeof r) && K(n, r, t, e)
    }, K = function (n, r, t, e) {
        n instanceof h && (n = n._wrapped), r instanceof h && (r = r._wrapped);
        var u = p.call(n);
        if (u !== p.call(r)) return !1;
        switch (u) {
            case"[object RegExp]":
            case"[object String]":
                return "" + n == "" + r;
            case"[object Number]":
                return +n != +n ? +r != +r : 0 == +n ? 1 / +n == 1 / r : +n == +r;
            case"[object Date]":
            case"[object Boolean]":
                return +n == +r;
            case"[object Symbol]":
                return s.valueOf.call(n) === s.valueOf.call(r)
        }
        var i = "[object Array]" === u;
        if (!i) {
            if ("object" != typeof n || "object" != typeof r) return !1;
            var o = n.constructor, a = r.constructor;
            if (o !== a && !(h.isFunction(o) && o instanceof o && h.isFunction(a) && a instanceof a) && "constructor" in n && "constructor" in r) return !1
        }
        e = e || [];
        for (var c = (t = t || []).length; c--;) if (t[c] === n) return e[c] === r;
        if (t.push(n), e.push(r), i) {
            if ((c = n.length) !== r.length) return !1;
            for (; c--;) if (!q(n[c], r[c], t, e)) return !1
        } else {
            var l, f = h.keys(n);
            if (c = f.length, h.keys(r).length !== c) return !1;
            for (; c--;) if (l = f[c], !j(r, l) || !q(n[l], r[l], t, e)) return !1
        }
        return t.pop(), e.pop(), !0
    }, h.isEqual = function (n, r) {
        return q(n, r)
    }, h.isEmpty = function (n) {
        return null == n || (w(n) && (h.isArray(n) || h.isString(n) || h.isArguments(n)) ? 0 === n.length : 0 === h.keys(n).length)
    }, h.isElement = function (n) {
        return !(!n || 1 !== n.nodeType)
    }, h.isArray = t || function (n) {
        return "[object Array]" === p.call(n)
    }, h.isObject = function (n) {
        var r = typeof n;
        return "function" === r || "object" === r && !!n
    }, h.each(["Arguments", "Function", "String", "Number", "Date", "RegExp", "Error", "Symbol", "Map", "WeakMap", "Set", "WeakSet"], function (r) {
        h["is" + r] = function (n) {
            return p.call(n) === "[object " + r + "]"
        }
    }), h.isArguments(arguments) || (h.isArguments = function (n) {
        return j(n, "callee")
    });
    var D = n.document && n.document.childNodes;
    "function" != typeof /./ && "object" != typeof Int8Array && "function" != typeof D && (h.isFunction = function (n) {
        return "function" == typeof n || !1
    }), h.isFinite = function (n) {
        return !h.isSymbol(n) && isFinite(n) && !isNaN(parseFloat(n))
    }, h.isNaN = function (n) {
        return h.isNumber(n) && isNaN(n)
    }, h.isBoolean = function (n) {
        return !0 === n || !1 === n || "[object Boolean]" === p.call(n)
    }, h.isNull = function (n) {
        return null === n
    }, h.isUndefined = function (n) {
        return void 0 === n
    }, h.has = function (n, r) {
        if (!h.isArray(r)) return j(n, r);
        for (var t = r.length, e = 0; e < t; e++) {
            var u = r[e];
            if (null == n || !i.call(n, u)) return !1;
            n = n[u]
        }
        return !!t
    }, h.noConflict = function () {
        return n._ = r, this
    }, h.identity = function (n) {
        return n
    }, h.constant = function (n) {
        return function () {
            return n
        }
    }, h.noop = function () {
    }, h.property = function (r) {
        return h.isArray(r) ? function (n) {
            return x(n, r)
        } : b(r)
    }, h.propertyOf = function (r) {
        return null == r ? function () {
        } : function (n) {
            return h.isArray(n) ? x(r, n) : r[n]
        }
    }, h.matcher = h.matches = function (r) {
        return r = h.extendOwn({}, r), function (n) {
            return h.isMatch(n, r)
        }
    }, h.times = function (n, r, t) {
        var e = Array(Math.max(0, n));
        r = y(r, t, 1);
        for (var u = 0; u < n; u++) e[u] = r(u);
        return e
    }, h.random = function (n, r) {
        return null == r && (r = n, n = 0), n + Math.floor(Math.random() * (r - n + 1))
    }, h.now = Date.now || function () {
        return (new Date).getTime()
    };
    var L = {"&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#x27;", "`": "&#x60;"}, P = h.invert(L),
        W = function (r) {
            var t = function (n) {
                return r[n]
            }, n = "(?:" + h.keys(r).join("|") + ")", e = RegExp(n), u = RegExp(n, "g");
            return function (n) {
                return n = null == n ? "" : "" + n, e.test(n) ? n.replace(u, t) : n
            }
        };
    h.escape = W(L), h.unescape = W(P), h.result = function (n, r, t) {
        h.isArray(r) || (r = [r]);
        var e = r.length;
        if (!e) return h.isFunction(t) ? t.call(n) : t;
        for (var u = 0; u < e; u++) {
            var i = null == n ? void 0 : n[r[u]];
            void 0 === i && (i = t, u = e), n = h.isFunction(i) ? i.call(n) : i
        }
        return n
    };
    var C = 0;
    h.uniqueId = function (n) {
        var r = ++C + "";
        return n ? n + r : r
    }, h.templateSettings = {evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g};
    var J = /(.)^/, U = {"'": "'", "\\": "\\", "\r": "r", "\n": "n", "\u2028": "u2028", "\u2029": "u2029"},
        V = /\\|'|\r|\n|\u2028|\u2029/g, $ = function (n) {
            return "\\" + U[n]
        };
    h.template = function (i, n, r) {
        !n && r && (n = r), n = h.defaults({}, n, h.templateSettings);
        var t,
            e = RegExp([(n.escape || J).source, (n.interpolate || J).source, (n.evaluate || J).source].join("|") + "|$", "g"),
            o = 0, a = "__p+='";
        i.replace(e, function (n, r, t, e, u) {
            return a += i.slice(o, u).replace(V, $), o = u + n.length, r ? a += "'+\n((__t=(" + r + "))==null?'':_.escape(__t))+\n'" : t ? a += "'+\n((__t=(" + t + "))==null?'':__t)+\n'" : e && (a += "';\n" + e + "\n__p+='"), n
        }), a += "';\n", n.variable || (a = "with(obj||{}){\n" + a + "}\n"), a = "var __t,__p='',__j=Array.prototype.join," + "print=function(){__p+=__j.call(arguments,'');};\n" + a + "return __p;\n";
        try {
            t = new Function(n.variable || "obj", "_", a)
        } catch (n) {
            throw n.source = a, n
        }
        var u = function (n) {
            return t.call(this, n, h)
        }, c = n.variable || "obj";
        return u.source = "function(" + c + "){\n" + a + "}", u
    }, h.chain = function (n) {
        var r = h(n);
        return r._chain = !0, r
    };
    var G = function (n, r) {
        return n._chain ? h(r).chain() : r
    };
    h.mixin = function (t) {
        return h.each(h.functions(t), function (n) {
            var r = h[n] = t[n];
            h.prototype[n] = function () {
                var n = [this._wrapped];
                return u.apply(n, arguments), G(this, r.apply(h, n))
            }
        }), h
    }, h.mixin(h), h.each(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function (r) {
        var t = e[r];
        h.prototype[r] = function () {
            var n = this._wrapped;
            return t.apply(n, arguments), "shift" !== r && "splice" !== r || 0 !== n.length || delete n[0], G(this, n)
        }
    }), h.each(["concat", "join", "slice"], function (n) {
        var r = e[n];
        h.prototype[n] = function () {
            return G(this, r.apply(this._wrapped, arguments))
        }
    }), h.prototype.value = function () {
        return this._wrapped
    }, h.prototype.valueOf = h.prototype.toJSON = h.prototype.value, h.prototype.toString = function () {
        return String(this._wrapped)
    }, "function" == typeof define && define.amd && define("underscore", [], function () {
        return h
    })
}();

下面是调用的过程,_就代表了underscore,这个函数的意思是输出1到20之间的随机数。

<script src="lib/underscore-min.js"></script>
<script>
    console.log(_.random(1, 20));
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值