如何在 JavaScript 中以严格模式访问函数调用者

问题描述 投票:0回答:1

我正在使用

  • 反应
  • tanstack查询
  • axios

我读到函数

caller
自 ES5 以来已被弃用(不确定 ES5)。所以我不能在严格模式下使用它。我不认为禁用严格模式是个好主意。 有什么好的替代函数或属性可以用在
strict mode
吗?

这里是我读过的链接。这里没有替代品。

当我尝试使用来电者时,这是一条错误消息。

TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them

顺便说一句,这是关于堆栈溢出的第一个问题。我不知道提问规则。如果您让我知道,我很高兴。

谢谢你。

我尝试在严格模式下查看日志。 我想看看是从哪里打来的 所以我访问函数调用者。 但我看到一条错误消息。

javascript function logging strict
1个回答
0
投票

看来不可能。但是您可以获得调用者的名称,并且如果可以从被调用者的范围访问调用者,则可以评估调用者。不确定这是否可以在生产中使用。无论如何,如果您需要调用者,请将其作为参数传递给被调用者。

'use strict';

function fnCaller(){
  fnCallee();
}

function fnCallee(){
  
  console.log(caller());
  
}

fnCaller();
<script>

function caller(){
  try{
    throw new Error;
  }catch(e){
    const name = e.stack.split('\n')[3].match(/(?<=^\s*at\s*)\S+/)[0];
    return eval(name);
  }
}

</script>

© www.soinside.com 2019 - 2024. All rights reserved.