Какое подмножество JavaScript предназначено (выводится) компилятором Google Closure?

Чтобы уточнить, какие части JavaScript выводятся компилятором Closure?

Я могу определенно понять, является ли это движущейся целью, из-за того, что название игры является оптимизацией кода, поэтому ссылка на соответствующие фрагменты исходного кода может быть наиболее полезной, если это так.

Что заставляет вас думать, что он вообще выводит подмножество? Его задача - минимизация, в первую очередь, необязательно с некоторой оптимизацией. Эта цель не связана с выводом подмножества языковых функций.

T.J. Crowder 29.03.2018 21:02

Хорошо, я понимаю это: весь набор является допустимым подмножеством. Таким образом, бит движущейся цели.

bbarker 29.03.2018 21:04

@ T.J.Crowder это определенно подмножество, когда вы пишете для компилятора закрытия (особенно в режиме расширенной оптимизации), вы должны писать JavaScript определенным образом.

Benjamin Gruenbaum 29.03.2018 21:05

@BenjaminGruenbaum: Прошло несколько лет, но хотя есть вещи, которые вам нужно сделать, чтобы включить / обойти оптимизацию (foo.bar против foo["bar"] и т. д.), Я не припомню ни одного языковые особенности, который вы не могли бы использовать с CC. (И это все равно будет вводом, не так ли?) Вы можете привести пример? (Придется исчезнуть, но заранее спасибо.)

T.J. Crowder 29.03.2018 21:07

@ T.J. Crowder with например

Benjamin Gruenbaum 29.03.2018 21:09

@BenjaminGruenbaum: Итак, глядя на ваш ответ, в основном это with и eval, с парой других вещей, с которыми он может не справиться. (Надо было подумать о with ...)

T.J. Crowder 30.03.2018 07:42

@ T.J.Crowder хорошо, и вы не можете полагаться на имена свойств и должны явно упомянуть об этом - хотя OP изменил вопрос на то, что является результатом (должен ли я откатиться?)

Benjamin Gruenbaum 30.03.2018 13:09

Я предполагаю, что цель может означать разные вещи, хотя я обычно думаю об этом как о выводе в компиляторах. Если вы измените свой ответ, добавив немного информации о es3 / 5, чтобы обсудить как вывод, так и ввод, я думаю, это будет здорово.

bbarker 30.03.2018 13:21

@BenjaminGruenbaum: Вопрос всегда касался вывода ("... какие части JavaScript выводятся компилятором Closure? ..."). Ваш ответ касается как вывода, так и ввода - на мой взгляд, это полезно, поскольку ввод влияет на вывод.

T.J. Crowder 30.03.2018 16:07

@bbarker готово.

Benjamin Gruenbaum 31.03.2018 13:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
10
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ограничения компилятора замыкания указаны в документации:

  • 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 with the 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 " для точной поддержки.

Другие вопросы по теме