函数返回错误(ESLint)将函数移至主体根

时间:2019-05-30 12:53:15

标签: javascript eslint

我有以下函数。代码执行了我需要做的事情,但是由于声明而结构不正确,因此给出了“((ESLint)move function to body root”的错误:

这是我的代码:

function onSuccess(result) {

            if (result) {
                 function GetTotal(result) {

                    var totBal = 0;
                    var str = 'R';
                    for (var i = 0; i < result.length; i++) {
                        totBal += result[i].Price;
                    }
                    str += totBal.toFixed(2);
                    return str;
                }
                var span = document.getElementById("Total");
                span.innerHTML = GetTotal(result);
            }
        }

这是我尝试过的:

function onSuccess(result) {
        var fn;
        if (result) {
          fn=function GetTotal(result) {

                var totBal = 0;
                var str = 'R';
                for (var i = 0; i < result.length; i++) {
                    totBal += result[i].Price;
                }
                str += totBal.toFixed(2);
                return str;
            };
            var span = document.getElementById("Total");
            span.innerHTML = GetTotal(result);
        }
    }

解决了“((ESLint)将函数移到主体根部”的问题,但是上面的代码返回了一个错误,提示“未定义getTotal”

3 个答案:

答案 0 :(得分:1)

在第二个示例中,该函数现在位于变量fn中。您可以通过调用fn()来访问它。另一种选择是重命名变量以反映函数的行为,然后使用新名称对其进行调用。

var fn;
fn=function GetTotal(result) {
  console.log('function called!');
}

fn();

答案 1 :(得分:1)

您可以按照ESLint的建议将函数移至主体根部

function onSuccess(result) {
  function GetTotal(result) {
    var totBal = 0;
    var str = 'R';
    for (var i = 0; i < result.length; i++) {
      totBal += result[i].Price;
    }
    str += totBal.toFixed(2);
    return str;
  }

  if (result) {
    var span = document.getElementById("Total");
    span.innerHTML = GetTotal(result);
  }
}

或者还是要摆脱该函数,因为它位于函数内部,并且您似乎不再使用它。

function onSuccess(result) {
  if (result) {
    var totBal = 0;
    var str = 'R';
    for (var i = 0; i < result.length; i++) {
      totBal += result[i].Price;
    }
    str += totBal.toFixed(2);
    var span = document.getElementById("Total");
    span.innerHTML = str
  }
}

答案 2 :(得分:0)

然后函数声明在右侧。它成为左侧变量的局部变量。在主函数作用域中使用名称setState()代替GetTotal

fn