在es2015中,`const func = foo => bar`使`func`成为一个命名函数,你如何绕过这个?

时间:2015-08-23 21:26:03

标签: javascript ecmascript-6

有没有办法绕过这种行为?

> foo => bar;
[Function]
> const func = foo => bar;
undefined
> func
[Function: func]

我有代码暂时存储这样的匿名函数,然后返回它。我不希望变量名的实现细节像这样公开。

1 个答案:

答案 0 :(得分:1)

这与ECMAScript无关。

确实,当您为匿名函数指定变量时,函数的name将被设置为变量的名称(感谢@loganfsmyth进行更正)。

由于name是可配置属性,因此您可以将其删除。但是,这将毫无用处,因为name是无关的。

例如,Firefox尚未实现将匿名函数命名为变量,因此name是示例中的空字符串。但是,当您记录该功能时,控制台仍会显示function func()

事实上,“问题”是浏览器希望更容易调试代码,因此他们的控制台会为函数推断出一个名称(不一定是name)。

Engines can infer function names给出了推理的例子:

  

不再需要为调试命名匿名函数

     
function f() {}            // display name: f (the given name)
var g = function () {};    // display name: g
o.p = function () {};      // display name: o.p
var q = {
  r: function () {}        // display name: q.r
};
function h() {
  var i = function() {};   // display name: h/i
  f(function () {});       // display name: h/<
}
var s = f(function () {}); // display name: s<

ECMAScript未对浏览器的控制台进行标准化,因此您无法修改此行为。