我对编程非常陌生。我不理解该函数如何在不被调用的情况下执行。我们这里没有调用任何函数,但是我们接收到输出。怎么了?
let eightGb = phones.filter(function(item, i){
if(item.ram == '8gb')
return item;
})
console.log(eightGb)
答案 0 :(得分:2)
该代码正在调用一个函数,它正在调用phones
的{{3}}方法,该方法大概是一个数组。 (方法就是函数。)filter
方法依次为数组中的每个条目调用传递给它的函数(“回调”)。 filter
构建一个新数组,该数组仅包含回调返回其真实值的原始数组的条目。因此,如果phones
中有12个项目,则回调将被调用12次:每个项目一次。该代码正在构建一个新数组,其中仅包含具有ram == '8gb'
的项目。
附带说明,但是该特定代码有点误导,因为它返回item
而不是true
。 filter
回调的返回值是一个标志。最好将回调写成这样:
let eightGb = phones.filter(function(item) {
return item.ram == '8gb';
});
console.log(eightGb);
或简洁的filter
,带有参数arrow function:
let eightGb = phones.filter(({ram}) => ram == '8gb');
console.log(eightGb);