をより読みやすいものにループを壊す:
- 再配置ループパラメータ
- は
if(...){(...)}
l
len
外
s = s.split(...)
移動
len
に変わっと
(...)&&(...)
を変更しました
。
var a, b, s = s.split(""), o = String.fromCharCode, c = "charCodeAt";
for(var i = -1, len = s.length; ++i < len;){
if((a = s[i][c](0)) & 0x80){
(s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ? o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "");
}
}
- は
i
初期値とどのように/それが
- が
a = s[i][c](0)
外側を移動増大場所を変更しました。
var a, b, s = s.split(""), o = String.fromCharCode, c = "charCodeAt";
for(var i = 0, len = s.length; i < len; i++){
a = s[i][c](0);
if(a & 0x80){
s[i] = (a & 0xfc);
(s[i] == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ? o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "");
}
}
- は
- を読むために物事を簡単にするために
tmp
を作成tmp
- に三項演算結果を格納し
if(...){s[++i] = "";}
- で
(s[i] == 0xc0 && tmp, s[++i] = "");
を分割さあなたの例の内側に新しいループを置き換えます
。
decode: function(s){
var tmp, a, b, s = s.split(""), o = String.fromCharCode, c = "charCodeAt";
for(var i = 0, len = s.length; i < len; i++){
a = s[i][c](0);
if(a & 0x80){
s[i] = (a & 0xfc);
if(((b = s[i + 1][c](0)) & 0xc0) == 0x80){
tmp = o(((a & 0x03) << 6) + (b & 0x3f));
}else{
tmp = o(128);
}
if(s[i] == 0xc0 && tmp){
s[++i] = "";
}
}
}
return s.join("");
}
最終結果/\
Ewwwww ......... –