Функциональный объект в JS - это захватывающая вещь, но он часто сбивает с толку, потому что он слишком гибкий.
Позвольте мне сначала показать вам фрагмент кода.
var scope = "global"; function constructfunction () {var scope = "local"; return new Function ("return acpope");} constructfunction () () (); function constructfunction2 () {var scope = "local"; return function () {return scope;}} constructfunction2 () ();Какое ваше первое чувство, когда вы видите эти два? Все возвращают "местный"? ? Если это так, вам нужно поближе взглянуть на объяснение ниже. ConstructFunction2 () должно быть легко понять закрытие, и я не буду вдаваться в подробности здесь. Далее я сосредоточусь на ситуации ConstructFunction ().
Конструктор function () используется здесь. Хотя конструктор функции () не очень часто используется, он все еще необходим для его понимания.
Независимо от того, является ли это оператором определения функции или непосредственным количественным выражением функции, определение функции должно использовать ключевое слово function (). Отдельные функции также могут быть определены конструктором function (), например:
var f = новая функция ("x", "y", "return x*y");Фактический эффект этой строки эквивалентен следующей строке кода.
var f = function (x, y) {x*y};Конструктор Function () может проходить в любом количестве аргументов строк, а текст, представленный последним аргументом, является корпусом функции; Он может содержать любое заявление JavaScript, и каждое утверждение разделено на полуколон. Все остальные строки аргументов, передаваемые в конструктор, представляют собой строки, которые указывают имя функции. Если определенная функция не содержит каких -либо параметров, просто передайте корпус функции строковой функции конструктору.
Есть несколько пунктов, чтобы уделить особое внимание конструктору функции ():
1. Function Constructor позволяет JavaScript динамически создавать и компилировать функции во время выполнения.
2. Каждый раз, когда называется конструктор функции (), корпус функции будет проанализирован, и будет создан новый объект функции. Если этот конструктор выполняется в цикле или нескольких вызовах, эффективность выполнения будет затронута. Напротив, вложенные функции и выражения определения функций в циклах не перекомпилируются каждый раз, когда они выполняются.
2. Последняя точка также является очень важной точкой для конструктора функции (), то есть функции, которые он создает, не используют лексическую область. Напротив, компиляция кода корпуса функции всегда будет выполняться на функции верхнего уровня. После прочтения это вышеуказанная функция Constructfunction () (); Должно быть легко понять, чтобы вернуть «глобальный»?
Выше приведено конструктор JS Function (), введенный редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!