笑笑十年
笑笑十年
算法题目,想了个原地改变数组的办法: 1. 把黄色都移动到前面 2. 把蓝色都移动到后面 3. 剩下的自然都是红色,不用管了就 ```javascript // 黄,红,蓝 function sort(arr) { let i = 0; let j = arr.length; for (let k = 0; k < j; k++)...
> > 算法题目,想了个原地改变数组的办法: > > > > 1. 把黄色都移动到前面 > > 2. 把蓝色都移动到后面 > > 3. 剩下的自然都是红色,不用管了就 > > > > ```js > > // 黄,红,蓝 > > function sort(arr)...
```javascript // 黄,红,蓝 function sort(arr) { let i = 0; let j = arr.length - 1; for (let k = 0; k i ? k-- : k; } else if...
双指针: ```javascript function renderSerial(...nums) { let res = []; let i = 0; let j = 1; while (j < nums.length) { if (nums[j] - nums[j - 1] !== 1)...
```javascript function restore(poke) { let arr = []; while (poke.length) { arr.push(poke.pop()); arr.push(arr.shift()); } // 最后回滚多走的一步 arr.unshift(arr.pop()); return arr; } ```
```javascript function spread(input) { let entry = {}; Object.keys(input).forEach(keys => { let prev = entry; let dots = keys.split('.'); for (let i = 0; i < dots.length - 1; i++)...
1. 问题不成立,没有谁远高于谁; 2. 最高票的测试代码有问题: new Array(N).forEach压根不循环; i < arr.length如果大循环应该提前定义长度变量;
我翻开尘封的书箱,找到编程珠玑(居然没当二手书卖掉), 又复习了一遍 第12章 取样问题...
猜的: 脚本执行对每个for循环都要重新新建一个词法环境(块级作用域): 第一个例子中最频繁的操作是在栈顶创建然后销毁,也就类似于原地前进一步后退一步; 第二个例子中最频繁的操作是从栈顶倒数三次,相当于前进三步再后退三步; 尽管总步数是一致的,词法环境创建的次数也一致,但是每一个词法环境是要维系外层调用关系的(闭包),这导致第二个例子中关系链路更长,分配内存/内部引用重建销毁的成本更高。 可以想象一下,如果让你走同样的步数,要求每走一步都要记住脚印的位置,第一个方案相当于走一步报告一次,而第二个方案相当于走三步报告一次。
上面说的都太复杂了,一句话: ``` 每个模块都有个名称,当文件内容改变时,通过建立好的socket通知浏览器; 然后页面端的webpack脚手架代码会重载这个模块文件。 ``` 有个前提是模块的名称不会变化,所以在开发期间的webpack配置的chunkId不能是hash,因为模块名称如果变化,webpack脚手架就找不到新的文件在浏览器中模块的位置,自然无法局部更新这个模块。 这个问题也许可以通过新旧文件名的map映射解决,但是同样的依赖这个模块的模块内容也变更了,因为引用链接变了,由此蔓延,就是说牵一发动全身,所有的模块内容都可能要更新,HMR也就没意义了。 但是在部署生产环境的的时候,为了防止浏览器缓存模块,一般是要做hash处理的。如果使用现成的什么create-react/vue之类的脚手架就不用关心这个,因为别人已经帮你处理好了,如果自己手动搭建要注意。