获得徽章 19
- #每日一题# watch 和 watchEffect区别
watchEffect立即运行一个函数,然后被动地追踪它的依赖,当这些依赖改变时重新执行该函数。watch侦测一个或多个响应式数据源并在数据源变化时调用一个回调函数。
watchEffect(effect)是一种特殊watch,传入的函数既是依赖收集的数据源,也是回调函数。如果我们不关心响应式数据变化前后的值,只是想拿这些数据做些事情,那么watchEffect就是我们需要的。watch更底层,可以接收多种数据源,包括用于依赖收集的getter函数,因此它完全可以实现watchEffect的功能,同时由于可以指定getter函数,依赖可以控制的更精确,还能获取数据变化前后的值,因此如果需要这些时我们会使用watch。
watchEffect在使用时,传入的函数会立刻执行一次。watch默认情况下并不会执行回调函数,除非我们手动设置immediate选项。
从实现上来说,watchEffect(fn)相当于watch(fn,fn,{immediate:true})展开评论点赞 - #每日一题# 实现promise.all
Promise.prototype.all = function(promises) {
let results = [];
let promiseCount = 0;
let promisesLength = promises.length;
return new Promise(function(resolve, reject) {
for (let val of promises) {
Promise.resolve(val).then(function(res) {
promiseCount++;
// results.push(res);
results[i] = res;
// 当所有函数都正确执行了,resolve输出所有返回结果。
if (promiseCount === promisesLength) {
return resolve(results);
}
}, function(err) {
return reject(err);
});
}
});
};展开评论点赞 - #每日一题# 实现深拷贝
function deepCopy(obj) {
// 如果不是对象或数组,则直接返回
if (typeof obj !== 'object' || obj === null) {
return obj;
}
// 创建一个新的对象或数组
const result = Array.isArray(obj) ? [] : {};
// 遍历对象或数组的每一个属性或元素
for (let key in obj) {
// 如果属性或元素是一个对象或数组,则递归调用深拷贝函数
if (typeof obj[key] === 'object' && obj[key] !== null) {
result[key] = deepCopy(obj[key]);
} else { // 否则直接复制
result[key] = obj[key];
}
}
return result;
}展开评论点赞