【问题标题】:Can someone convert this arrow function into Normal function? [closed]有人可以将此箭头函数转换为普通函数吗? [关闭]
【发布时间】:2019-04-29 03:28:29
【问题描述】:

我无法将此箭头函数转换为普通函数。我已经在 chrome 的控制台面板中对此进行了测试。此代码取自 freecodeCamp.org 的 Es6 课程

//This is what I have tried. The final output result is showing undefined


const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
const squareList = function(arr) {
    "use strict";
    const squaredIntegers = function(num) {
        (function() {
            arr.filter(Number.isInteger(num) && num > 0);
        });       
        return squaredIntegers;
    } 
}

const squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);

//Here is the Arrow function I was trying to convert

const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
const squareList = (arr) => {
    "use strict";
    const squaredIntegers = arr.filter(num => Number.isInteger(num) && num > 0);
    return squaredIntegers;
};
const squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);


//The code should output this
[4, 42, 6];

【问题讨论】:

  • 只用函数关键字替换语法
  • 你做的外层没问题...那你为什么不能用内层复制你所做的呢?我的意思是,看起来你知道自己在做什么

标签: javascript web ecmascript-6 arrow-functions


【解决方案1】:

箭头函数中=> 之后的任何表达式都成为函数的隐式返回,但您需要在普通函数中使用return 关键字显式返回。

const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
const squareList = function(arr){
    "use strict";
    const squaredIntegers = arr.filter(function(num){
        return Number.isInteger(num) && num > 0
    });
    return squaredIntegers;
};
const squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);

【讨论】:

  • 你会认为 OP 会知道......因为他设法让const squareList = (arr) => { 正确:p
  • @JaromandaX 知道吗?
  • 知道如何将箭头转换为常规函数(虽然可能不是隐式返回部分,仅适用于简单语句)
【解决方案2】:

我将你的代码插入Babel 并得到了这个:

"use strict";

var realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];

var squareList = function squareList(arr) {
  "use strict";

  var squaredIntegers = arr.filter(function (num) {
    return Number.isInteger(num) && num > 0;
  });
  return squaredIntegers;
};

var squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);

(一般情况下,当你需要将 ES6+ 语法转换为 ES5 时,可以使用 Babel 自动完成。)

【讨论】:

    【解决方案3】:
    var realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
    
    var squareList = function squareList(arr) {
      "use strict";
    
      var squaredIntegers = arr.filter(function (num) {
        return Number.isInteger(num) && num > 0;
      });
      return squaredIntegers;
    };
    
    var squaredIntegers = squareList(realNumberArray);
    console.log(squaredIntegers);
    

    我猜这一定行得通。

    【讨论】:

      【解决方案4】:

      你有一些问题。

      函数语法是

      function name(param_list)
      function name(p1,pn)
      

      也许保留内联声明会更好。

      function natural(num)
      {
         return Number.isInteger(num) && num > 0;
      }
      
      function squarelist(arr)
      {
          "use strict";
          const squaredIntegers = arr.filter(natural); //notice non lambda needs a name
          return squaredIntegers;
      }
      

      【讨论】:

      • 实际上,JavaScript 的“有趣”之一是您可以声明匿名函数。这就是它在 ESLint 中出现的全部原因:匿名函数很难调试(但并非不可能),如果你不注意,可能会导致错误。无论如何,您不必单独声明该函数。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
      猜你喜欢
      • 2022-12-06
      • 2019-04-12
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 2019-08-12
      • 2020-03-07
      • 2017-12-06
      相关资源
      最近更新 更多