【问题标题】:How to get function name in javascript arrow function?如何在javascript箭头函数中获取函数名称?
【发布时间】:2021-08-17 04:33:20
【问题描述】:

我想在箭头函数中获取函数的名称

其实,如果我们写

function abc(){
  let funcName = arguments.callee.name
}

但在箭头函数中

abc: ()=>{
  let funcName = arguments.callee.name
}

函数名返回''

【问题讨论】:

  • 不是匿名函数吗?
  • 这有点像问数字12的变量名是什么
  • @MaxZoom 我添加了函数名
  • 你确定在箭头函数内访问arguments对象时没有得到error吗?
  • 函数名称为“abc:”,编译为父对象的abc属性时分配给箭头函数。如果需要,您可以在箭头函数中对其进行硬编码。

标签: javascript node.js ecmascript-6


【解决方案1】:
  • 箭头函数没有arguments 绑定。但是他们可以访问最近的非箭头父函数的参数对象。命名参数和剩余参数在很大程度上依赖于捕获传递给箭头函数的参数。
function dummy() {
  return (() => arguments.callee.name)(); // dummy
}
  • 箭头函数内的this 的值在函数的整个生命周期内保持不变,并绑定到最近的this 提供环境的值。
const obj = {
  // like a normal function, returns obj - defines like obj.a = function a() {};
  a() { return this },
  // arrow function uses global as this
  b: () => { return this },
};
console.log(obj.a() == obj) // true
console.log(obj.b() == obj) // false
console.log(obj.b() == window) // true
  • 箭头函数永远不能用作构造函数。因此,它们永远不能用 new 关键字调用。因此,箭头函数不存在原型属性。

因此,获取箭头函数名称的唯一方法是访问对它的直接引用。

const arrow = () => arrow.name;
console.log(arrow()); // "arrow"

const obj = {
  a: () => obj.a.name;
}
console.log(obj.a()); // "a"

【讨论】:

  • 除了“你的代码不起作用(因为箭头函数没有arguments”,我看不出这如何回答有关获取@的问题987654328@
  • “总是绑定到最近的非箭头父函数中的 this 的值。” 对于大多数用例来说可能已经足够了,但只是为了完整性:它是最接近的“this-providing”环境,可以是全局环境或模块环境(不是那些this 值会很有趣,但仍然如此)。
猜你喜欢
  • 2011-01-10
  • 2021-02-15
  • 2019-06-16
  • 2022-11-02
  • 2021-08-13
  • 1970-01-01
  • 2017-04-18
  • 2019-01-06
相关资源
最近更新 更多