安全代码new Set()可能如下所示:
let items = [];
for (let item of set)
if (isBad(item))
items.push(item);
for (let item of items)
set.delete(item)
Run Code Online (Sandbox Code Playgroud)
我可以简化代码:
for (let item of set)
if (isBad(item))
set.delete(item);
Run Code Online (Sandbox Code Playgroud)
安全代码new Map()可能如下所示:
let keys = [];
for (let [key, val] of map)
if (isBadKey(key) || isBadValue(val))
keys.push(key);
for (let key of keys)
map.delete(key)
Run Code Online (Sandbox Code Playgroud)
我可以简化代码:
for (let [key, val] of map)
if (isBadJey(key) || isBadValue(val))
map.delete(key)
Run Code Online (Sandbox Code Playgroud) 我正在阅读airbnb javascript指南。有一个特别的声明,说:
不要使用迭代器。首选JavaScript的高阶函数,而不要使用for-in或for-of等循环。
他们给出上述声明的原因是:
这执行了我们不变的规则。处理返回值的纯函数比副作用更容易推论。
我无法区分给出的两种编码实践:
const numbers = [1, 2, 3, 4, 5];
// bad
let sum = 0;
for (let num of numbers) {
sum += num;
}
sum === 15;
// good
let sum = 0;
numbers.forEach((num) => {
sum += num;
});
sum === 15;
Run Code Online (Sandbox Code Playgroud)
谁能解释,为什么应该forEach优先于常规for循环?真的有什么不同?使用常规药有副作用iterators吗?