获得徽章 8
- 【高程4】7、迭代器与生成器1、可迭代的对象都包含有限个元素,而且具有无歧义的遍历顺序。计数循环和数组都具有可迭代对象的行为。
2、可以通过Symbol.iterator来判断对象是否可迭代。迭代器维护一个指向可迭代对象的引用,因此会阻止垃圾回收。
3、迭代器并不与可迭代对象某个时刻的快照绑定,只是以游标方式记录可迭代对象的遍历过程,如果可迭代对象在迭代期间被修改了,那么迭代器也将反映相应的变化。
4、可以为对象添加Symbol.iterator和next函数,自定义迭代器。可选的return函数指定迭代器提前关闭时的执行逻辑(for循环中的break、continue、return、throw等提前退出循环时)。若迭代器没有关闭,则下次迭代会从上次离开位置继续。
5、普通函数添加*可以变为生成器函数(箭头函数不可以),调用生成器函数返回一个生成器对象,行为用法与迭代器相当。yield可以暂停生成器对象,返回一个值。yield * 可以对迭代器遍历,依次返回迭代器里的值。展开评论点赞 - 【书名】:高程4
【读书笔记】:6、集合引用类型
1、使用字面量创建对象和数组不会调用Object、Array的构造函数。
2、任何可迭代的、有length属性的、可索引的元素结构都可以通过Array.from转化为数组。
3、sort方法默认会在数组的每一项上调用String类型转换函数,然后按升序排列。
4、数组的断言函数及迭代函数都可接收两个参数:1、以每一项为参数运行的函数。2、可选的作为函数运行上下文的作用域对象(影响函数的this指向)。
5、object和Map的区别在于:Map可以使用任意类型作为键,并维护键值对的插入顺序。
6、weakMap只可以用对象作为建,且在对象不被其他地方引用时,被垃圾回收。展开评论点赞 - 【书名】:高程4
【读书笔记】:5.3 原始值包装类型
1、String、Boolean、Number的原始值以读模访问时,后台会先创建一个相关类型的实例,然后调用实例上的方法,最后销毁实例。
2、引用类型和原始值包装类型的主要区别在于对象的生命周期。通过new实例化的对像会在离开作用域时销毁,原始值包装类型创建的对像只在读取的那一行代码执行期间。
3、new Object()会根据传入参数的类型返回相应的原始值包装类型的实例。此时用instanceOf判断类型即是Object也是相应的原始值类型。
4、encodeURI不会编码属于URL的特殊符号,比如冒号,斜杠,井号,问号。encodeURIComponent会编码发现的所有非标准字符。展开赞过评论1 - 【书名】:高程4
【读书笔记】:4.3 垃圾回收
1、js是使用垃圾回收的语言,js引擎会周期性的在合适的时机自动进行内存清理。
2、两种主要的标记策略是:标记清理和引用计数。
3、循环引用时,引用计数无法自动清理内存,需要手动设置为null,才能被垃圾回收。
4、v8的回收策略会根据活跃对象数量和一些余量,来确定下次垃圾回收的时机。
5、优化内存占用的最佳手段是将不需要的变量设置为null解除引用。解除引用并不会导致相关内存被回收,解除引用的关键在于确保相关值已经不在上下文里,因此会在下次垃圾回收时被回收。
6、let、const是块级作用域,一般比var的函数级作用域更早结束,因此声明的变量会更早被垃圾回收,优化内存占用。
7、属性完全相同的实例会共用隐藏类。频繁动态的创建对象会增加不必要的垃圾回收调用,影响性能,可以采用静态分配和对象池来优化。展开赞过评论1
![[哭笑]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_61.a296509.png)