Javascript 在对象声明中添加函数名有什么好处?

Javascript 在对象声明中添加函数名有什么好处?,javascript,gulp,webpack,Javascript,Gulp,Webpack,例如,当我指定一个函数作为对象声明的属性时,我的Web包加载程序babel loader会自动添加一个函数名?例如,假设我有以下比较函数: var utils = { compare: function (a, b) { if (parseFloat(a[0]) - parseFloat(b[0]) === 0) { return parseFloat(a[1]) - parseFloat(b[1]); } else { return pars

例如,当我指定一个函数作为对象声明的属性时,我的Web包加载程序babel loader会自动添加一个函数名?例如,假设我有以下比较函数:

var utils = {
  compare: function (a, b) {
    if (parseFloat(a[0]) - parseFloat(b[0]) === 0) {
      return parseFloat(a[1]) - parseFloat(b[1]);
    }
    else {
      return parseFloat(a[0]) - parseFloat(b[0]);
    }
  }
}
Webpack将其编译为以下内容:

var utils = {
  compare: function compare(a, b) {

    if (parseFloat(a[0]) - parseFloat(b[0]) === 0) {
      return parseFloat(a[1]) - parseFloat(b[1]);
    } else {
      return parseFloat(a[0]) - parseFloat(b[0]);
    }
  }
}

[compare:function(a,b)已更改为compare:functioncompare(a,b)]

为调试和递归目的命名所有函数是一种很好的做法。Babel用加载程序在传输的代码上这样做,这不是Webpack的工作。

在您在问题中发布的代码中,确实没有什么好处。但是,要递归调用匿名函数,需要给它一个名称(至少在较新版本的javascript中是这样)。此语法有一个名称。它叫“世界杯”

在旧版本的javascript中,
参数
对象有一个名为
.callee
的属性,该属性引用函数。这可用于递归到匿名函数中:

var sum = function(numbers){
    var n = numbers.pop();
    if (numbers.length) {
        return n + arguments.callee(numbers);
    }
    return n;
}
var sum = function s (numbers){
    var n = numbers.pop();
    if (numbers.length) {
        return n + s(numbers);
    }
    return n;
}
ES5中已弃用
arguments.callee
属性。因此,在当前(和更新)版本的javascript中,您需要使用命名函数表达式对匿名函数进行递归:

var sum = function(numbers){
    var n = numbers.pop();
    if (numbers.length) {
        return n + arguments.callee(numbers);
    }
    return n;
}
var sum = function s (numbers){
    var n = numbers.pop();
    if (numbers.length) {
        return n + s(numbers);
    }
    return n;
}


注意,根据规范,命名函数表达式的名称是函数本身的私有名称。因此,在无缺陷的javascript解释器/编译器中,上面的第二个示例不应在匿名函数
sum()
之外创建名为
s()
的函数。但是,一些ES4实现(较旧的浏览器)已知已损坏,将同时创建
s()
sum()
。除了名称泄漏之外,命名函数表达式语法在过去10年左右发布的所有浏览器中都有效。

它对调试很有用,但编写起来很痛苦。不是webpack起作用,而是loader@elclanrs请您详细说明一下好吗?@Razroo酋长:在devtools中,您会看到函数的名称,而不是(匿名)。