Раздел: Сайтостроение / JavaScript /
Конструктор Function() в JavaScript
Достаточно подробно о функциях в JavaScript я рассказал здесь, но упустил одну возможность - создание функций с помощью конструктора.
Эта возможность используется редко, но она существует. И знать о ней лишним не будет.
Кроме обычного определения функции и функциональных литералов, в JavaScript ещё можно использовать конструктор
Function(). Обратите внимание, что слово пишется с большой буквы, и, надеюсь, вы помните, что JavaScript чувствителен к регистру.
Итак, вот пример:
var kub = new Function("x", "return x*x*x;");
Здесь мы определяем новую функцию с именем kub, которая возводит число в третью степень. Поскольку
Function - это конструктор, то для создания новой функции используется new.
В конструктор передаётся список аргументов функции и код функции. Аргументов может быть несколько. Например:
var kubPlus = new Function("x, y", "return x*x*x + y;");
Далее эту функцию можно использовать обычную функцию в JavaScript.
Если сценарий выполняется в браузере, то об очистке памяти можно и не заботиться, потому что после закрытия браузера память будет освобождена. Кроме того, все браузеры имеют сборщики мусора, которые отслеживают работу сценариев и удаляют из памяти ненужные данные.
Однако для того, чтобы понять, что данные уже не нужны, браузер должен убедиться, что ссылок на эти данные больше нет. А для этого всё-таки не лишним будет удалить эти ссылки в программе, если эти данные больше не будут использоваться. Поэтому после того, как функция уже не нужна, надо сделать хотя бы так:
kub = null;
Таким образом по имени kub данные будут недоступны, а это будет означать, что имя kub ни на что не ссылается и мусор, которым стал код функции, ранее связанной с этим именем, теперь можно удалить. Что браузер и сделает.
Ну и напоследок пример кода:
<body> <h1 id="myheader">Конструктор Function()</h1> <script> <!-- var kub = new Function("x", "return x*x*x;"); var kubPlus = new Function("x, y", "return x*x*x + y;"); var y = 100; x = 5; document.write(x + "<sup>3</sup>" + " = " + kub(x) + "<br>"); document.write(x + "<sup>3</sup> + " + y + " = " + kubPlus(x, y)); kubPlus = null; kub = null; document.write("<br><br>Память освобождена"); // --> </script> </body>
Думаю, что дополнительных пояснений тут уже не требуется. В браузере это будет выглядеть примерно так: