Skip to content

Commit 6527f45

Browse files
committed
看书练习备忘
1 parent f8721e3 commit 6527f45

File tree

3 files changed

+120
-0
lines changed

3 files changed

+120
-0
lines changed

memo/uncurrying.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
//Function.prototype.uncurrying = function () {
2+
// var self = this; // self此时是Array.prototype.push
3+
// return function () {
4+
// var obj = Array.prototype.shift.call(arguments);
5+
// // obj是{
6+
// // length:1,
7+
// // 0:1
8+
// // }
9+
// // arguments对象的第一个元素被截去,剩下[2]
10+
// return self.apply(obj, arguments);
11+
// }
12+
//};
13+
14+
// uncurrying的另外一种实现方式
15+
Function.prototype.uncurrying = function () {
16+
var self = this;
17+
return function () {
18+
Function.prototype.call.apply(self, arguments);
19+
20+
//可以剖析成下面的方式来读:
21+
//Function.prototype.call(Array.prototype.push, arguments);
22+
//Array.prototype.push.call(obj = { length: 1, 0: 1}, 2);
23+
}
24+
};
25+
26+
var push = Array.prototype.push.uncurrying(),
27+
objA = {
28+
length: 1,
29+
0: 1
30+
};
31+
push(objA, 2);
32+
console.log(objA); // { '0': 1, '1': 2, length: 2 }
33+
34+
//给array对象拓展多个数组方法
35+
for (var i = 0, fn, ary = ['push', 'shift', 'forEach']; fn = ary[i++];) {
36+
Array[fn] = Array.prototype[fn].uncurrying();
37+
}
38+
var objB = {
39+
length: 3,
40+
0: 1,
41+
1: 2,
42+
2: 3
43+
};
44+
Array.push(objB, 4); // 向数组添加一个元素
45+
console.log(objB.length); // 4
46+
47+
var first = Array.shift(objB);
48+
console.log(first); // undefined WHY?????
49+
console.log(objB); // { '0': 2, '1': 3, '2': 4, length: 3 }
50+
51+
Array.forEach(objB, function (i, n) {
52+
console.log(n); // 分别输出:0,1,2
53+
});

memo/函数节流.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var throttle = function (fn, interval) {
2+
var __self = fn, // 保存需要被延迟执行的函数引用
3+
timer, // 定时器
4+
firstTime = true; // 是否是第一次调用
5+
6+
return function () {
7+
var args = arguments,
8+
__me = this;
9+
10+
if (firstTime) { // 如果是第一次调用,不需要延迟执行
11+
__self.apply(__me, arguments);
12+
return firstTime = false;
13+
}
14+
15+
if (timer) {
16+
return false;
17+
}
18+
19+
timer = setTimeout(function () { //延迟一段时间执行
20+
clearTimeout(timer);
21+
timer = null;
22+
__self.apply(__me, args);
23+
}, interval || 500)
24+
}
25+
};
26+
27+
window.onresize = throttle(function () {
28+
console.log(1);
29+
}, 500);

memo/分时函数.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
var timeChunk = function (ary, fn, count) {
2+
3+
var obj,
4+
t;
5+
6+
var len = ary.length;
7+
8+
var start = function () {
9+
for (var i = 0; i < Math.min(count || 1, ary.length); i++) {
10+
obj = ary.shift();
11+
fn(obj);
12+
}
13+
};
14+
15+
return function () {
16+
t = setInterval(function () {
17+
if (len === 0) {
18+
return clearInterval(t);
19+
}
20+
start();
21+
}, 200);
22+
};
23+
24+
};
25+
26+
var ary = [];
27+
28+
for (var i = 1; i <= 1000; i++) {
29+
ary.push(i);
30+
}
31+
32+
var renderFriendList = timeChunk(ary, function (n) {
33+
var div = document.createElement('div');
34+
div.innerHTML = n;
35+
document.body.appendChild(div);
36+
}, 8);
37+
38+
renderFriendList();

0 commit comments

Comments
 (0)