首页 > 解决方案 > 增加对 JavaScript 中评估/执行的理解

问题描述

对于以下 JavaScript 代码,如何计算出评估/执行顺序?排除运算符优先级,专注于功能,是否squareList可以将“从右到左”和“由内而外”的原则应用到代码中?

我的意思是,在这种情况下,JS 评估的第一个语句是:

return num > 0 && num % parseInt(num) === 0;

已经为数组中的每个项目评估了一个,然后我们将前进到该行

return arr.filter(function (num) {

最后:

return Math.pow(num, 2);

如果我以错误的方式考虑这个问题,那么我需要一些帮助,我如何使用指南或官方资源来了解评估/执行顺序以及首先运行什么?以及随后的陈述以什么顺序?

整个代码块:

const squareList = function squareList(arr) {
  return arr.filter(function (num) {
    return num > 0 && num % parseInt(num) === 0;
  }).map(function (num) {
    return Math.pow(num, 2);
  });
};

const squaredIntegers = squareList([-3, 4.8, 5, 3, -3.2]);

console.log(squaredIntegers);

标签: javascript

解决方案


const squareList = function squareList(arr) {
  return arr.filter(function (num) {
    return num > 0 && num % parseInt(num) === 0;
  }).map(function (num) {
    return Math.pow(num, 2);
  });
};

所以首先发生的事情当然是

arr.filter(function (num) {
    return num > 0 && num % parseInt(num) === 0;
  })

内部函数在数组中的每个元素上运行,并且对于该函数返回的每个元素true,该元素被添加到生成的过滤数组中,然后该过滤数组代替整个arr.filter(...)代码块

然后你有

filteredArray.map(function (num) {
  return Math.pow(num, 2);
});

再次,内部函数在每个元素上运行,并且该函数的返回值被添加到 NEXT 最终结果数组,一个映射数组

最后你把它还给你

return mappedArray

推荐阅读