duangsuse::Echo
#China #Low #weibo
https://github.com/FirefoxBar/HeaderEditor/blob/master/src/background.js HeaderEditor 的 response body 修改 #Learn #JavaScript
解码用到了新的 ArrayBuffer / TypedArray API
传统的 Message 化控制流扩展
WebExtensions ContextMenus API
常见的 BrowserAction
还有许多不能直接发上来了,只有简化版,待会还有一个 time limited cache,看看。
解码用到了新的 ArrayBuffer / TypedArray API
browser.runtime.onMessage.addListener(function(request, sender, sendResponse) 传统的 Message 化控制流扩展
if (browser.contextMenus != undefined)
browser.contextMenus.onClicked.addListener((info, tab) => { WebExtensions ContextMenus API
browser.browserAction.setIcon({ path: "" }) 常见的 BrowserAction
_textEncode(encoding, text) {
let encoder = this._textEncoder.get(encoding); //cache
if (!encoder) {
// UTF-8使用原生API,性能更好
if (encoding === "UTF-8" && window.TextEncoder) {
encoder = new window.TextEncoder();
} else {
encoder = new TextEncoder(encoding, { NONSTANDARD_allowLegacyEncoding: true });
}
this._textEncoder.set(encoding, encoder);
}
// 防止解码失败导致整体错误
try {
return encoder.encode(text);
} catch (e) {
console.log(e);
return new Uint8Array();
}
} 还有许多不能直接发上来了,只有简化版,待会还有一个 time limited cache,看看。
GitHub
FirefoxBar/HeaderEditor
Manage browser's requests, include modify the request headers and response headers, redirect requests, cancel requests - FirefoxBar/HeaderEditor
Forwarded from duangsuse Throws
#dev #JavaScript #Haha 草,我竟然做出来了……
一个车夫,赶着1辆马车,车上坐着5个人,每人拿着5个袋子,每个袋子里装着5只大猫,
每只大猫带5只小猫,每只小猫带着5只老鼠干粮
问:这道题里一共有多少条腿? 😂
衬衫的价格是 9 磅 15 便士。ES6。
一个车夫,赶着1辆马车,车上坐着5个人,每人拿着5个袋子,每个袋子里装着5只大猫,
每只大猫带5只小猫,每只小猫带着5只老鼠干粮
问:这道题里一共有多少条腿? 😂
衬衫的价格是 9 磅 15 便士。ES6。
constanswer = cheche(1) //13104
laoshu = n => n*4,
mao = n => laoshu(n)*5 + 4,
bigmao = n => mao(n)*5 + 4,
daizi = n => bigmao(n)*5,
ren = n => daizi(n)*5 + 2,
cheche = n => 2 + ren(5);
Forwarded from 憨憨的碎碎念 | #成为打工人 (Channel Helper)
===== 评论区 =====
duangsuse: https://t.me/dsuset/7251
wuhang2003 - 疯狂...: (➤duangsuse) 同学给的答案是 15516,某搜题软件提供的答案是 15512 ,怎么说这差距也太大了🌚
duangsuse: https://t.me/dsuset/7251
constanswer = cheche(1) //13104
laoshu = n => n*4,
mao = n => laoshu(n)*5 + 4,
bigmao = n => mao(n)*5 + 4,
daizi = n => bigmao(n)*5,
ren = n => daizi(n)*5 + 2,
cheche = n => 2 + ren(5);
wuhang2003 - 疯狂...: (➤duangsuse) 同学给的答案是 15516,某搜题软件提供的答案是 15512 ,怎么说这差距也太大了🌚
Telegram
duangsuse Throws
#dev #JavaScript #Haha 草,我竟然做出来了……
一个车夫,赶着1辆马车,车上坐着5个人,每人拿着5个袋子,每个袋子里装着5只大猫,
每只大猫带5只小猫,每只小猫带着5只老鼠干粮
问:这道题里一共有多少条腿? 😂
衬衫的价格是 9 磅 15 便士。ES6。
const
laoshu = n => n*4,
mao = n => laoshu(n)*5 + 4,
bigmao = n => mao(n)*5 + 4,
daizi = n => bigmao(n)*5,
ren = n…
一个车夫,赶着1辆马车,车上坐着5个人,每人拿着5个袋子,每个袋子里装着5只大猫,
每只大猫带5只小猫,每只小猫带着5只老鼠干粮
问:这道题里一共有多少条腿? 😂
衬衫的价格是 9 磅 15 便士。ES6。
const
laoshu = n => n*4,
mao = n => laoshu(n)*5 + 4,
bigmao = n => mao(n)*5 + 4,
daizi = n => bigmao(n)*5,
ren = n…
https://github.com/itorr/homo/blob/master/homo.js#L1 #JavaScript #code
核心代码,首先我们有一个类似这样的表,
核心代码,首先我们有一个类似这样的表,
eval(xs[i]) == i : ["1", "2"]function divmod(a, b) { return [Math.trunc(a/b), a%b]; }
function ordFinder(xs, cmp, is_descending = false) {
const sorted = is_descending? xs.sort((a, b) => b-a) : xs.sort();
return function finder(n) {
for (let x of xs) if (cmp(x, n)) return x;
};
}
const findMaxLT = ordFinder(predefined, (a, b) => a < b, true);
function demolish(num) {
if (typeof num != "number") return "";
if (num < predefined.length) return predefined[num];
let [k, div] = divmod(num, findMaxLT(num) );
return `({demolish(k)}*{div}+{deomolish(mod)})`. replace(/\*\(1\)/, "") //*1=itself
}
开始我还以为是自动构造数学表达式然后 filter 呢……GitHub
homo/homo.js at master · itorr/homo
💩「恶臭数字论证器」数字恶臭化工具. Contribute to itorr/homo development by creating an account on GitHub.
#web #PLT #JavaScript #zhihu https://www.zhihu.com/question/385711203#write
牛逼啊,竟然还扯出了 extonic object, 稀疏数组, 2^53-1 一大堆术语
牛逼啊,竟然还扯出了 extonic object, 稀疏数组, 2^53-1 一大堆术语
Zhihu
为什么js没有array初始大小和扩容的概念? - 知乎
在谈论js时,很少听人谈论array,object等引用型数据类型初始大小以及扩容的问题?这是为什么?也没有听…
function* readSourceTable(text) { //< obsoleted
let entries = text.split("\n\n");
for (let entry of entries) {
let entryList = [];
let key = null; let content = "";
for (let line of entry.split("\n").map(it => it.trim())) {
if (line.length == 0) continue;
if (line.endsWith(":")) {
if (key != null) entryList.push([key, content]);
key = line.substring(0, line.length-1); content = "";
} else content += `${line}\n`;
}
entryList.push([key, content]);
yield entryList;
}
} #JavaScript #web 丢掉的代码,虽然也不怎么厉害Forwarded from dnaugsuz
https://t.me/dsuse/11472
这个是 js 的动态尾递归优化(迫真)
这个是 js 的动态尾递归优化(迫真)
Telegram
duangsuse::Echo
推荐一个 tco 函数 #JavaScript #FP
function _argveq(xs, ys, rb_i) { var i = rb_i | Math.min(xs.length,ys.length);
if(xs.length !== ys.length) return false;
while (i!==0) { --i; if(xs[i] != ys[i]) return false; }
return true;
}
// op tailrec must rewrite its…
function _argveq(xs, ys, rb_i) { var i = rb_i | Math.min(xs.length,ys.length);
if(xs.length !== ys.length) return false;
while (i!==0) { --i; if(xs[i] != ys[i]) return false; }
return true;
}
// op tailrec must rewrite its…
补充一句: #Python #PLT #cs 红姐 其实是 github.com/thautwarm
https://pythonhunter.org/episodes/ep11
https://github.com/anqurvanillapy
另外 ANQUR 也是 Python 大佬
#JavaScript 的 贺老 就是贺师俊、 阮老师 就是 阮一峰
这些是昵称/尊称。
https://pythonhunter.org/episodes/ep11
https://github.com/anqurvanillapy
另外 ANQUR 也是 Python 大佬
#JavaScript 的 贺老 就是贺师俊、 阮老师 就是 阮一峰
这些是昵称/尊称。
GitHub
thautwarm - Overview
Casting a fireball. thautwarm has 237 repositories available. Follow their code on GitHub.
duangsuse::Echo
幸好,我已经准备好弄内部 DSL 版的了😥
中午还没吃饭,那就不吃了,最近浪费时间第一的实践...
#JavaScript 其实最开始我是不打算用 fold 解释器的,打算直接用 eval() 处理变成 clickingOn("wtf").addsClass("") 这种形式的代码,为此还定义了一个
foldReplace(/(\S+)\s+(\S+)("[^"]*")?/, (a,b,c) => a+capitalize(b)+c?
但是发现这样没法区别处理 "" 里的东西,不得不换成兼容 ES5 的 RegExp sticky flag 分词法。
总之,这次感觉血亏,跟着一个30岁,还只会前端、冒鬼点子的大叔,也没学到写CSS。
嗯…… 也不全对,学到了个 requestAnimationFrame((t_ms) => void) 算 start/elapsed
还有魔怔的 +function(){}() 等于 (function(){})() IIFE 技巧
#JavaScript 其实最开始我是不打算用 fold 解释器的,打算直接用 eval() 处理变成 clickingOn("wtf").addsClass("") 这种形式的代码,为此还定义了一个
foldReplace(/(\S+)\s+(\S+)("[^"]*")?/, (a,b,c) => a+capitalize(b)+c?
(${c}):"", "apple fd") function capitalize(s) { return (s=="")?"" : s[0].toUpperCase()+s.substr(1, s.length); } function foldReplace(re, op, input) { var text=input; var matched=false; do { matched=false; text = text.replace(re, (_, ...args) => { matched=true; return op(...args); }); } while(matched); return text; }但是发现这样没法区别处理 "" 里的东西,不得不换成兼容 ES5 的 RegExp sticky flag 分词法。
总之,这次感觉血亏,跟着一个30岁,还只会前端、冒鬼点子的大叔,也没学到写CSS。
嗯…… 也不全对,学到了个 requestAnimationFrame((t_ms) => void) 算 start/elapsed
还有魔怔的 +function(){}() 等于 (function(){})() IIFE 技巧
Forwarded from RWTG9Y4's STDOUT
#ce #plt #JS #DontKnow 在 #JavaScript 的一个
(其中 fetch 返回一个 Promise,且这个 Promise 一定是成功的)
duangsuse:
await 的话等价 yield 执行权给 awaiter ,成功了 return it ,大概是 Promise<String> ?
reply:
正常 async 函数返回值也是
other:
如果返回的是promise那么还得await或是then
reply:
并不需要,Promise 套娃是会自动解开的
duangsuse:
[In reply to duangsuse]
呃……想起来了,async awaiter 其实会自动 await yield 的 Promise ,而 return 也是一种 yield
duangsuse:
[In reply to reply]
duangsuse:
[In reply to duangsuse]
亦可简写为
果然是 try-catch 时控制流易跑偏……看来在协程continuation的实现方面结构化异常处理需要注意啊
duangsuse:
[In reply to reply]
感觉你这个和举的例子有点区别啊…… 举的例子里 return 是实际执行的最后一条语句
第一个…… 不对,看起来是我默认错了
最后一行和实际末语句是有区别的,如在
尾调用优化也是
duangsuse, [13.01.21 11:06]
try {} 里的 return 语句居然还能前置执行 finally {} ,涨知识了
之前哪里能用到这么多 try 块……
await 休眠当前函数实现的不错,看来这个问题是问“控制流什么方法可以在 return 前加逻辑”啊
回答本身是执行顺序问题。如果直接 return Promise 会被 awaiter 处理,类型上也没错
async function 中,请问在什么情况下 return fetch(...) 和 return await fetch(...) 会有区别?(其中 fetch 返回一个 Promise,且这个 Promise 一定是成功的)
duangsuse:
async function 相当于一个可带 awaiter 的 function* ,封装为 Promise
直接 return Promise 大概会得到二层的这个await 的话等价 yield 执行权给 awaiter ,成功了 return it ,大概是 Promise<String> ?
reply:
正常 async 函数返回值也是
Promise<string> 哦(注: fetch() resolve 后是 stringother:
如果返回的是promise那么还得await或是then
reply:
并不需要,Promise 套娃是会自动解开的
duangsuse:
[In reply to duangsuse]
呃……想起来了,async awaiter 其实会自动 await yield 的 Promise ,而 return 也是一种 yield
duangsuse:
[In reply to reply]
async function op1() { return Promise.resolve(100); }
async function op2() { return 100; }
for (let op of [op1,op2]) op().then(console.log); //100 x2
function foldN(n, op, x) { var acc=x; for (var i=0;i<n; i++) {acc = op(acc);} return acc; }
foldN(4, (x) => Promise.resolve(x), 100).then(console.log)
reply:try { return op1(); } finally { op2(); }
里 op1() 先执行try { return await op1(); } finally { op2(); }
里 op2() 先执行duangsuse:
[In reply to duangsuse]
亦可简写为
const puts=console.info;
const op1 = async()=>Promise.resolve(100), op2 = async()=>100;
for (let op of [op1,op2]) op().then(puts);
foldN(4, v=>Promise.resolve(v), 100).then(puts);另外一般内部实现的 awaiter 亦可这么定义:
function __onestep(gen) {
let {value, done} = gen.next();
if (!done && value instanceof Promise) value.then(x => __onestep(gen.next(x)) );
else return value;
}
function __awaiter(gen) { return Promise((resolve, reject) => { resolve(__onestep(gen)); }; }
未实现 reject果然是 try-catch 时控制流易跑偏……看来在协程continuation的实现方面结构化异常处理需要注意啊
duangsuse:
[In reply to reply]
感觉你这个和举的例子有点区别啊…… 举的例子里 return 是实际执行的最后一条语句
第一个…… 不对,看起来是我默认错了
最后一行和实际末语句是有区别的,如在
() => { return 1; print(); } 里。尾调用优化也是
return thisOp(); 是可变成循环, return thisOp()+1; 仍需保留调用栈duangsuse, [13.01.21 11:06]
try {} 里的 return 语句居然还能前置执行 finally {} ,涨知识了
之前哪里能用到这么多 try 块……
await 休眠当前函数实现的不错,看来这个问题是问“控制流什么方法可以在 return 前加逻辑”啊
回答本身是执行顺序问题。如果直接 return Promise 会被 awaiter 处理,类型上也没错