这是我参与更文挑战的第1天 活动详情查看: 更文挑战
一、模拟常用的高阶函数
1、map(遍历数组,返回新数组)
const map = (array, fn) => {
let results = [];
for (let value of array) {
results.push(fn(value));
}
return results;
}
// 测试求平方
let arr = [1, 2, 3, 4];
arr = map(arr, v => v * v);
console.log(arr);//[1,4,9,16]
复制代码
2、every(检测数组中的元素是否都满足条件)
const every = (array, fn) => {
let result = true;
for (let value of array) {
result=fn(value);
if(!result){
break;
}
}
return result;
}
// 测试
let arr = [1, 2, 3, 4];
let r = every(arr, v => v >0);
console.log(r);//true
复制代码
3、some(检测数组中的元素是否有一个满足条件)
const some = (array, fn) => {
let result = false;
for (let value of array) {
result = fn(value);
if (result) {
break;
}
}
return result;
}
// 测试
let arr = [1, 5, 3, 9];
let r = some(arr, v => v % 2 === 0);
console.log(r);
复制代码
二、垃圾回收
作用
- 回收过期无效的变量,防止内存泄漏
垃圾回收算法
1.引用计数
现代浏览器基本上已经不再使用了,在这里我们做一下简单的介绍。引用计数的含义是跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数就减1。当这个引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其所占的内存空间给收回来。这样,垃圾收集器下次再运行时,它就会释放那些引用次数为0的值所占的内存。简单来说就是看一个对象是否有指向它的引用。如果没有其他对象指向它了,说明该对象已经不再需要了。
2.标记清除
标记清除算法将“不再使用的对象”定义为“无法到达的对象”。即从根部(在JS中就是全局对象)出发定时扫描内存中的对象,凡是能从根部到达的对象,保留。那些从根部出发无法触及到的对象被标记为不再使用,稍后进行回收。每一个变量都有自己的使用环境,当进入环境以后,垃圾回收机制就会给他打上一个“进入环境”的标签,从逻辑上来将,系统不能清除处于环境中的变量,因为只要是在环境中就有可能会使用到。当其离开环境时,会给其打上“离开环境”标签,这时候便可以进行回收了。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END