arguments.callee.caller, error.stack и встраивание - PullRequest
0 голосов
/ 27 мая 2020

MDN говорит: :

Другой устаревшей функцией была arguments.callee.caller, точнее Function.caller. Почему это? Что ж, в любой момент времени вы можете найти самого глубокого вызывающего из любой функции в стеке, и, как я сказал выше, просмотр стека вызовов имеет один главный эффект: он делает невозможным большое количество оптимизаций или гораздо более сложное . Например, если вы не можете гарантировать, что функция f не вызовет неизвестную функцию, невозможно встроить f.

Но в то же время у нас есть стек вызовов ( но только как текст, а не как функции) при возникновении ошибки.

Итак, мой вопрос: почему arguments.callee.caller предотвращает встраивание, а выдача ошибки - нет, если у них обоих должен быть правильный стек вызовов? В чем разница?

function f(x) {
  return x + 1
}

try {
  void [1, 2, { valueOf() { throw new Error } }].map(f)
} catch (e) {
  console.log(e.stack)
}
...