有没有办法绕过这种行为?
> foo => bar;
[Function]
> const func = foo => bar;
undefined
> func
[Function: func]
我有代码暂时存储这样的匿名函数,然后返回它。我不希望变量名的实现细节像这样公开。
答案 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未对浏览器的控制台进行标准化,因此您无法修改此行为。