From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../reference/global_objects/function/index.html | 155 +++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 files/uk/web/javascript/reference/global_objects/function/index.html (limited to 'files/uk/web/javascript/reference/global_objects/function/index.html') diff --git a/files/uk/web/javascript/reference/global_objects/function/index.html b/files/uk/web/javascript/reference/global_objects/function/index.html new file mode 100644 index 0000000000..f2672fe180 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/function/index.html @@ -0,0 +1,155 @@ +--- +title: Function +slug: Web/JavaScript/Reference/Global_Objects/Function +tags: + - Constructor + - Function + - JavaScript +translation_of: Web/JavaScript/Reference/Global_Objects/Function +--- +
{{JSRef}}
+ +

Конструктор Function створює новий об'єкт Function. Прямий виклик конструктора може створювати функції динамічно, але має проблеми з безпекою та схожі з {{jsxref("eval")}} (але менш значні) проблеми з продуктивністю. Однак, на відміну від eval, конструктор Function створює функції, які виконуються тільки у глобальній області видимості.

+ +

{{EmbedInteractiveExample("pages/js/function-constructor.html")}}

+ + + +

У JavaScript кожна функція є об'єктом Function. Це можна побачити за допомогою коду (function(){}).constructor === Function, який повертає true.

+ +

Синтаксис

+ +
new Function ([arg1[, arg2[, ...argN]],] functionBody)
+ +

Параметри

+ +
+
arg1, arg2, ... argN
+
Імена, які будуть використані функцією в якості імен формальних аргументів. Кожне ім'я має бути рядком, який представляє ідентифікатор JavaScript, або списком таких рядків, розділених комою; наприклад, "x", "theValue" або "a,b".
+
functionBody
+
Рядок, що містить інструкції JavaScript, які складають визначення функції.
+
+ +

Опис

+ +

Об'єкти Function, створені конструктором Function, аналізуються, коли створюється функція. Це менш ефективно, ніж оголошувати функцію функціональним виразом або оголошенням функції та викликати її, бо такі функції аналізуються разом з рештою коду.

+ +

Усі аргументи, передані у функцію, сприймаються як імена ідентифікаторів параметрів функції, що має бути створена, в тому порядку, в якому вони передані.

+ +

Виклик конструктора Function у вигляді функції (без оператора new) має той самий ефект, що й виклик конструктора.

+ +

Властивості та методи об'єкта Function

+ +

Глобальний об'єкт Function не має власних методів та властивостей, однак, він успадковує деякі методи та властивості через ланцюжок прототипів від {{jsxref("Function.prototype")}}.

+ +

Об'єкт прототипу Function

+ +

Властивості

+ +
{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype', 'Властивості')}}
+ +

Методи

+ +
{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype', 'Методи')}}
+ +

Екземпляри Function

+ +

Екземпляри Function успадковують методи та властивості від {{jsxref("Function.prototype")}}. Як і в усіх конструкторах, ви можете змінити об'єкт прототипу конструктора, щоб внести зміни до усіх екземплярів Function.

+ +

Приклади

+ +

Визначення аргументів у конструкторі Function

+ +

Наступний код створює об'єкт Function, що приймає два аргументи.

+ +
// Цей приклад можна запустити прямо у консолі JavaScript
+
+// Створити функцію, що приймає два аргументи та повертає суму цих аргументів
+var adder = new Function('a', 'b', 'return a + b');
+
+// Виклик функції
+adder(2, 6);
+// > 8
+
+ +

Аргументи "a" та "b" є іменами формальних аргументів, які використовуються у тілі функції, "return a + b".

+ +

Різниця між конструктором Function та оголошенням функції

+ +

Функції, створені конструктором Function, не утворюють замикань з контекстом свого cтворення; вони завжди cтворюються у глобальній області видимості. Під час виконання вони матимуть доступ лише до власних локальних змінних та глобальних змінних, а не до змінних з області видимості, де був створений конструктор Function. Це відрізняється від {{jsxref("eval")}} з кодом функціонального виразу.

+ +
var x = 10;
+
+function createFunction1() {
+    var x = 20;
+    return new Function('return x;'); // цей |x| звертається до глобального |x|
+}
+
+function createFunction2() {
+    var x = 20;
+    function f() {
+        return x; // цей |x| звертається до локального |x|, записаного вище
+    }
+    return f;
+}
+
+var f1 = createFunction1();
+console.log(f1());          // 10
+var f2 = createFunction2();
+console.log(f2());          // 20
+ +

В той час, як цей код працює у веб-переглядачах, f1() спричинить ReferenceError у Node.js, через те, що x не буде знайдено. Це відбувається тому, що область видимості верхнього рівня у Node не є глобальною областю видимості, і x буде локальною змінною модуля.

+ +

Специфікації

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
СпецифікаціяСтатусКоментар
{{SpecName('ES1')}}{{Spec2('ES1')}}Початкове визначення. Реалізоване у JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.3', 'Function')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-function-objects', 'Function')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-function-objects', 'Function')}}{{Spec2('ESDraft')}}
+ +

Сумісність з веб-переглядачами

+ + + +

{{Compat("javascript.builtins.Function")}}

+ +

Див. також

+ + -- cgit v1.2.3-54-g00ecf