为什么在Chrome DevTool中逐步调试时JavaScript函数的toString方法会被多次调用?

3

测试环境:

  • MacOS v10.14.6;
  • Chrome 89.0.4389.82

问题描述:

我在一个函数的toString方法中添加了一个断点,并逐步调试它,当我执行到下一行时,我看到toString方法被调用。

用语言描述有点困难,请观看屏幕录制:视频

为什么?

代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    function fn() { }

    fn.toString = function () {
      debugger;
      console.log('toString called');
      const a = 'a';
      return a;
    };

    fn.toString();
  </script>
</body>

</html>
1个回答

2

当使用某些IDE调试程序时,就像在调试Java程序时在IDEA中一样,开发工具通过调用变量的toString函数来显示其值。


我不明白这个解释为什么在debugger之前调用了多次console.log。只是为了让你有个想法,如果你将toString()移出fn()函数,日志就不会多次发生。 - fortunee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接