2016-08-23 4 views
1

Я разрабатываю lib в настоящее время, который опирается на arguments.callee.caller. Это несовместимо с "use strict", поэтому он выдает ошибку, когда функция вызывающего абонента была определена в строгом режиме. Я поймаю эти ошибки, они не имеют большого значения, поскольку важная часть не определена в строгом режиме. Есть ли среда, которая поддерживает только строгий режим, и поэтому не совместима с этой библиотекой?Есть ли среда js, которая поддерживает только строгий режим?

+2

Узел может быть вынужден выполнить весь код в строгом режиме с флагом командной строки, если это то, что вы хотите знать , – Bergi

+0

Для чего вам нужен '.caller'? – Bergi

+0

@Bergi Спасибо! Я хотел знать что-то подобное. :-) Я использую вызывающего абонента, чтобы сделать что-то вроде 'Error.captureStackTrace (o, fn)' в среде, отличной от v8: https://github.com/inf3rno/e3/blob/master/lib/stackAdapter/StackAdapter /non-v8/FrameStringSource.js#L16 Я тестирую в настоящее время для 'arguments.callee.caller', чтобы сделать изящную деградацию, но этот тест не поймает ошибку в строгом режиме. Мне нужно изменить это. – inf3rno

ответ

1

Есть ли среда, которая поддерживает только строгий режим?

Вы можете настроить Node.js, чтобы сделать это, см Any way to force strict mode in node?:

node --use_strict 
0

Любая современная среда JS всегда будет иметь строгий режим в контексте certain ES6 contexts. А именно:

  • код модуля всегда строгий код режима.
  • Все части a ClassDeclaration или ClassExpression - это строгий код режима.

Конечно, реальный ответ здесь не использовать arguments.callee.caller, если вы хотите быть на будущее.

Но если вы хотите избежать ограничения строгого режима, вы можете напрямую получить доступ к Function.caller с именованными функциями. Это сильно обескураживает, так как это нестандартная функция.

Смежные вопросы