Чтобы уточнить, какие части JavaScript выводятся компилятором Closure?
Я могу определенно понять, является ли это движущейся целью, из-за того, что название игры является оптимизацией кода, поэтому ссылка на соответствующие фрагменты исходного кода может быть наиболее полезной, если это так.
Хорошо, я понимаю это: весь набор является допустимым подмножеством. Таким образом, бит движущейся цели.
@ T.J.Crowder это определенно подмножество, когда вы пишете для компилятора закрытия (особенно в режиме расширенной оптимизации), вы должны писать JavaScript определенным образом.
@BenjaminGruenbaum: Прошло несколько лет, но хотя есть вещи, которые вам нужно сделать, чтобы включить / обойти оптимизацию (foo.bar против foo["bar"] и т. д.), Я не припомню ни одного языковые особенности, который вы не могли бы использовать с CC. (И это все равно будет вводом, не так ли?) Вы можете привести пример? (Придется исчезнуть, но заранее спасибо.)
@ T.J. Crowder with например
@BenjaminGruenbaum: Итак, глядя на ваш ответ, в основном это with и eval, с парой других вещей, с которыми он может не справиться. (Надо было подумать о with ...)
@ T.J.Crowder хорошо, и вы не можете полагаться на имена свойств и должны явно упомянуть об этом - хотя OP изменил вопрос на то, что является результатом (должен ли я откатиться?)
Я предполагаю, что цель может означать разные вещи, хотя я обычно думаю об этом как о выводе в компиляторах. Если вы измените свой ответ, добавив немного информации о es3 / 5, чтобы обсудить как вывод, так и ввод, я думаю, это будет здорово.
@BenjaminGruenbaum: Вопрос всегда касался вывода ("... какие части JavaScript выводятся компилятором Closure? ..."). Ваш ответ касается как вывода, так и ввода - на мой взгляд, это полезно, поскольку ввод влияет на вывод.
@bbarker готово.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ограничения компилятора замыкания указаны в документации:
The Compiler only recognizes ECMAScript. ECMAScript 5 is the version of JavaScript supported almost everywhere. However the compiler also supports many of the features in ECMAScript 6. The compiler only supports official language features.
- The Compiler does not preserve comments.
- When you use
withthe Compiler can't distinguish between a local variable and an object property of the same name, and so it renames all instances of the name.- The Compiler doesn't parse the string argument of
eval(), and so it won't rename any symbols within this argument.- The Compiler renames functions and function parameters but does not change any strings in your code that refer to functions or parameters by name.
- In order to rename global variables, functions, and properties correctly, the Compiler must know about all references to those globals. You must tell the Compiler about symbols that are defined outside of the code being compiled. Advanced Compilation and Externs describes how to declare external symbols.
- Compiled code must export any symbols that uncompiled code refers to. Advanced Compilation and Externs describes how to export symbols.
- The Compiler renames properties in Advanced mode, but it never renames strings. If you need to refer to a property with a quoted string, always use a quoted string:
- The Compiler renames properties and variables independently
- When you compile functions without compiling the code that calls those functions, the Compiler assumes that the functions are never called and removes them.
- Property flattening can change meaning of the keyword this within a function.
- Using Object.defineProperties or ES6 getter/setters: The compiler does not understand these constructs well.
Если вы хотите работать с результатом, проверьте дерево синтаксиса - но вывод компилятора закрытия - ES5 или ES3, они не дают никаких гарантий относительно фактических функций, используемых в выходном коде. См. "JavaScript поддерживается компилятором Closure " для точной поддержки.
Что заставляет вас думать, что он вообще выводит подмножество? Его задача - минимизация, в первую очередь, необязательно с некоторой оптимизацией. Эта цель не связана с выводом подмножества языковых функций.