实习的话!尽力而为!努力提升自己!希望毕业了以后能够挣多多的钱!
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 = {"&": "&", "<": "<", ">": ">", '"': """, "'": "'", "`": "`"}, 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>