0%

迁移了计算机数据以后,Chrome 书签栏有可能会出现网页图标(favicon)不显示的情况(都是白色默认图标),使用以下步骤即可修复(via):

1. 彻底关闭 Chrome; 2. 打开 Chrome User Data 文件夹(文件夹路径); 3. 删除名为「Favicon」的文件; 4. 打开 Chrome; 5. 点击访问书签栏上的每一个标签,强行刷新图标。

Have fun! PS:Chrome User Data 路径如下:

#Default Location

#Windows XP
Google Chrome: C:\Documents and Settings\%USERNAME%\Local Settings\Application Data\Google\Chrome\User Data\Default
Chromium: C:\Documents and Settings\%USERNAME%\Local Settings\Application Data\Chromium\User Data\Default

#Windows 10 / 8 / 7 / Vista
Google Chrome: C:\Users\%USERNAME%\AppData\Local\Google\Chrome\User Data\Default
Chromium: C:\Users\%USERNAME%\AppData\Local\Chromium\User Data\Default

#Mac OS X
Google Chrome: ~/Library/Application Support/Google/Chrome/Default
Chromium: ~/Library/Application Support/Chromium/Default

#Linux
Google Chrome: ~/.config/google-chrome/Default
Chromium: ~/.config/chromium/Default

#Chrome OS
/home/chronos/

#Cache Directory

#The cache directory follows the XDG specs:
Google Chrome: $XDG_CACHE_HOME/google-chrome, which defaults to ~/.cache/google-chrome
Chromium: $XDG_CACHE_HOME/chromium, which defaults to ~/.cache/chromium
#If you pass –user-data-dir=/path/to/foo, the cache will be under /path/to/foo.

网易云音乐 MAC 客户端出现「网络不给力哦,请检查网络设置」的情况,症状如下: 1、打开 web 版网易云音乐一切正常; 2、相同网络下手机客户端一切正常; 3、打开 Surge 后 MAC 客户端正常,查看 Request 记录发现网络是走的 DIRECT(未走 ** 渠道) 使用各种方法都无法修复,而 Surge 如果常开的话会影响其他软件的使用(一般不会常开),百般无奈,查看网络设置 -> 高级 -> 代理,取消掉了「Web 代理」和「安全 Web 代理」的勾选,重新打开网易云音乐客户端,一切正常。 问题得以解决,不过不算优雅,坏处是,以后每次想要使用 Surge 又要重新勾选这两个选项了。

题目是这样的,啤酒2块钱一瓶,2个空瓶子或者4个瓶盖可以换一瓶新的,如果手上有10元钱,可以喝多少瓶啤酒。写了个 JS 脚本来计算,代码如下(demo):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var changing = function(money, price){
var count = parseInt(money/price),
bottle = count,
lid = count,
lidRate = 4,
bottleRate = 2;
(function change(){
// 兑换盖子
if(lid >= lidRate){
var lGet = parseInt(lid/lidRate);
count += lGet;
bottle += lGet;
lid -= lGet*(lidRate-1);
console.log('使用瓶盖'+ lGet*lidRate +'个,兑换:'+ lGet +'瓶');
console.log('已喝:'+ count + ', 剩余瓶盖:'+ lid +', 剩余空瓶:'+ bottle);
}
// 兑换空瓶
if(bottle >= bottleRate){
var bGet = parseInt(bottle/bottleRate);
count += bGet;
bottle -= bGet;
lid += bGet*(bottleRate-1);
console.log('使用空瓶'+ bGet*bottleRate +'个,兑换:'+ bGet +'瓶');
console.log('已喝:'+ count + ', 剩余瓶盖:'+ lid +', 剩余空瓶:'+ bottle);
}
// 判断剩余
if(bottle >= bottleRate || lid >= lidRate){
change();
} else {
console.log('总共喝:'+ count + ', 剩余瓶盖:'+ lid +', 剩余空瓶:'+ bottle);
}
})();
};
// 开始计算
changing(10, 2);

BTW:题目的答案是最终可以喝 15 瓶(计算过程如下图),你答对了吗?

基于 Promise 的 ajax 请求,可以实现链式调用,使代码结构更清晰,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
'use strict';
// 函数封装
var handleAjax = function handleAjax() {
var options = arguments.length <= 0 || arguments\[0\] === undefined ? {} : arguments\[0\],
opt = {
url: options.url || '',
data: options.data || 't=' + new Date().getTime(),
type: options.type || 'get',
dataType: options.dataType || 'json',
cache: options.cache || false,
async: options.async || true,
context: options.context || document.body,
beforeSend: options.beforeSend || undefined
};
return new Promise(function (resolve, reject) {
var req = new XMLHttpRequest();
if (typeof opt.beforeSend === 'function') {
opt.beforeSend();
}
req.open(opt.type, opt.url, opt.async);
req.onload = function () {
if (req.status === 200) {
var data = req.responseText;
if (opt.dataType === 'json') {
data = JSON.parse(data);
}
resolve(data);
} else {
reject(new Error(req.statusText || 'You can\\'t do this.'));
}
};
req.onerror = function () {
reject(new Error(req.statusText || 'Server is down.'));
};
req.send();
});
};
// 调用函数
var options = {
url: 'http://httpbin.org/get'
};
handleAjax(options).then(function (data) {
console.log(data);
})\['catch'\](function (error) {
console.log(error);
});

预览效果 | 源码 | 参考资料

当我们把一个多参数的函数,分解为若干个但参数的函数时,我们就在进行函数柯里化(Currying)。一个小例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var add = function(){
var args = arguments,
ret = 0;
[].forEach.call(args, function(item){
var num = +item || 0;
ret += num;
});
console.log('result: '+ ret);
return ret;
};
Function.prototype.currying = function(){
var args = [].slice.call(arguments),
self = this;
return function(){
var combinedArgs = args.concat([].slice.call(arguments));
return self.apply(null, combinedArgs);
};
};
var add123 = add.currying(1, 2, 3),
add456 = add123.currying(4, 5, 6);
// 运行
add456(7, 8, 9);
add456(1);
add456(2, 3);

参考文章:尾调用优化Thunk 函数的含义和用法 PS:柯里化的对偶是反柯里化(Uncurrying),且听下回分解吧。