Ответ 1
Это причина. Из MDN:
в строгом режиме больше не возможно "ходить" по стеклу JavaScript через общепринятые расширения в ECMAScript. В нормальном коде с этими расширениями, когда функция fun находится посреди вызываемого вызова, fun.caller - это функция, которая в последнее время называется fun, а fun.arguments - это аргументы для этого вызова забавы. Оба расширения являются проблематичными для "безопасного" JavaScript, поскольку они позволяют "защищенному" коду получить доступ к "привилегированным" функциям и их (потенциально необеспеченным) аргументам. Если забава находится в строгом режиме, как fun.caller, так и fun.arguments - не подлежащие удалению свойства, которые бросаются при установке или извлечении:
Если вы делаете ES6, вы не можете в общем случае отключить строгий режим. Он подразумевается во время определенных условий, например, в модуле ES6.
Если вы просто отлаживаете, я бы предложил просто использовать точку останова в отладчике и проверить фрейм стека, но я уверен, что вы это уже знаете.
Если вы просто выводите информацию об отладке, вы также можете просто прочитать стек объекта Error:
console.log(new Error().stack);
Вы можете globaly disable (но я понимаю, что это не то, что вы хотите) use strict
с babel. Используя либо:
require("6to5").transform("code", { blacklist: ["useStrict"] });
или
$ 6to5 --blacklist useStrict
Если вы должны отключить его на уровне модуля, я подозреваю, что вам придется делать это самостоятельно. Базовая строка заменяет, возможно,?
Кроме того, как было указано в ES5. Он должен быть xe.caller.name
, а не xe.caller().name
или вы повторно вызываете функцию.