recursal/MDN huggingface dataset:
Function.arguments
==================

**Устарело:** Эта возможность была удалена из веб-стандартов. Хотя некоторые браузеры по-прежнему могут поддерживать её, она находится в процессе удаления. Не используйте её ни в старых, ни в новых проектах. Страницы или веб-приложения, использующие её, могут в любой момент сломаться.

Сводка
------

Свойство **`function.arguments`** ссылалось на массивоподобный объект, соответствующий аргументам, переданным в функцию. Используйте вместо него простую переменную `arguments` (en-US).

Описание
--------

Синтаксис `function.arguments` устарел. Рекомендуемым способом доступа к объекту `arguments` (en-US), доступному внутри функций, является простая ссылка на переменную `arguments` (en-US).

В случае рекурсии, то есть, если функция `f` несколько раз появляется в стеке вызовов, значение `f.arguments` представляет аргументы, соответствующие самому последнему вызову функции.

Примеры
-------


```js
function f(n) {
  g(n - 1);
}

function g(n) {
  console.log("до: " + g.arguments[0]);
  if (n > 0) {
    f(n);
  }
  console.log("после: " + g.arguments[0]);
}

f(2);

// Вывод

// до: 1
// до: 0
// после: 0
// после: 1
```

Спецификации
------------

#### No specification found

No specification data found for `javascript.builtins.Function.arguments`.  
Check for problems with this page or contribute a missing `spec_url` to mdn/browser-compat-data. Also make sure the specification is included in w3c/browser-specs.

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* объект `arguments` (en-US)
* Функции и их область видимости (en-US)
Function.displayName
====================

**Не стандартно:** Эта возможность не является стандартной и стандартизировать её пока никто не собирается. Не используйте её на сайтах, смотрящих во внешний мир: она будет работать не у всех пользователей. Также могут присутствовать большие несовместимости между реализациями и её поведение может в будущем измениться.

Сводка
------

Свойство **`function.displayName`** возвращает отображаемое имя функции.

Описание
--------

Если оно определено, свойство `displayName` возвращает отображаемое имя функции:


```js
function doSomething() {}

alert(doSomething.displayName); // "undefined"

var popup = function (content) {
  alert(content);
};

popup.displayName = "Показать всплывающее окно";

alert(popup.displayName); // "Показать всплывающее окно"
```


Вы можете определить функцию с отображаемым именем в выражении функции (en-US):


```js
var object = {
  someMethod: function () {},
};

object.someMethod.displayName = "someMethod";

alert(object.someMethod.displayName); // выведет "someMethod"

try {
  someMethod;
} catch (e) {
  alert(e);
}
// ReferenceError: someMethod is not defined
```


Вы можете динамически изменять свойство `displayName` функции:


```js
var object = {
  // анонимная функция
  someMethod: function (value) {
    this.displayName = "someMethod (" + value + ")";
  },
};

alert(object.someMethod.displayName); // "undefined"

object.someMethod("123");
alert(object.someMethod.displayName); // "someMethod (123)"
```

Примеры
-------

Обычно оно используется консолью и профилировщиком, как обёртка над `func.name` для отображения имени функции.

Введя следующий пример в консоль, вы должны увидеть что-то вроде "`function Моя функция()`":


```js
var a = function () {};
a.displayName = "Моя функция";

a;
```

Спецификации
------------

Не является частью какой-либо спецификации.

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Конструктор Function()
======================

**Конструктор `Function`** создаёт новый **объект** `Function`. Вызов конструктора напрямую позволяет создавать функции программным путём, однако такой способ представляет угрозу для безопасности, а также несёт разные (хотя не такие значительные) проблемы с производительностью при использовании с `Global_Objects/eval`. Однако в отличие от eval, конструктор `Function` создаёт функции, выполняемые только в глобальной области видимости.

Интерактивный пример
--------------------

Синтаксис
---------


```js
new Function(arg1, functionBody)
new Function(arg1, arg2, functionBody)
new Function(arg1, ... , argN, functionBody)
```

### Параметры

`arg1, arg2, ... argN`

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

Поскольку параметры разбираются так же, как и объявления функций, допускается использование пробелов и комментариев. Например: `"x", "theValue = 42", "[a, b] /* numbers */"` — или `"x, theValue = 42, [a, b] /* numbers */"`. (`"x, theValue = 42", "[a, b]"` также будет правильным, хотя трудно читаемым).

`functionBody`

Строка, содержащая инструкции JavaScript, составляющие определение функции.

Описание
--------

Объекты `Function`, созданные конструктором `Function`, разбираются при создании функции. Определение функции при помощи выражения function или инструкции function и вызова её внутри вашего кода более эффективно, поскольку такие функции разбираются вместе с остальным кодом.

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

Вызов конструктора `Function` как функции (без использования оператора `new`) имеет тот же самый эффект, что и вызов его как конструктора.

Примеры
-------

### Пример: указание аргументов в конструкторе Function

Следующий код создаёт объект `Function, который принимает два аргумента.


```js
// Пример может быть запущен непосредственно в вашей консоли JavaScript

// Создаём функцию, принимающую два аргумента, и возвращающую их сумму
const adder = new Function("a", "b", "return a + b");

// Вызываем функцию
adder(2, 6);
// 8
```


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

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-function-constructor |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* Функции и их область видимости
* Инструкция `function`
* Выражение `function`
* Инструкция `function*`
* Выражение `function*`
* `AsyncFunction`
* `GeneratorFunction`
Function.length
===============

Сводка
------

Свойство **`length`** определяет количество аргументов, ожидаемых функцией.

| Атрибуты свойства `Function.length` |
| --- |
| Записываемое | нет |
| Перечисляемое | нет |
| Настраиваемое | да |

Описание
--------

Свойство `length` является свойством объекта функции и указывает, сколько аргументов ожидает функция, то есть, количество формальных параметров. Это количество не включает остаточные параметры (en-US). В отличие от него, свойство `arguments.length` (en-US) является локальным для функции и предоставляет количество аргументов, реально переданных в функцию.

### Свойство данных конструктора `Function`

Конструктор `Function` сам является объектом `Function`. Его свойство данных `length` имеет значение 1. Атрибуты свойства: записываемое: `false`, перечисляемое: `false`, настраиваемое: `true`.

### Свойство объекта прототипа `Function`

Свойство `length` объекта прототипа `Function` имеет значение 0.

Примеры
-------


```js
console.log(Function.length); /\* 1 \*/

console.log(function () {}.length); /\* 0 \*/
console.log(function (a) {}.length); /\* 1 \*/
console.log(function (a, b) {}.length); /\* 2 и так далее \*/
console.log(
  function (...args) {}.length,
); /\* 0, остаточные параметры не считаются \*/
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-function-instances-length |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Function`
Function.caller
===============

**Не стандартно:** Эта возможность не является стандартной и стандартизировать её пока никто не собирается. Не используйте её на сайтах, смотрящих во внешний мир: она будет работать не у всех пользователей. Также могут присутствовать большие несовместимости между реализациями и её поведение может в будущем измениться.

Сводка
------

Свойство **`function.caller`** возвращает функцию, которая вызвала указанную функцию.

Описание
--------

Если функция `f` была вызвана из кода самого верхнего уровня, значение `f.caller` будет равно `null`, в противном случае значение будет равно функции, вызвавшей `f`.

Это свойство пришло на замену удалённого свойства `arguments.caller` объекта `arguments` (en-US).

Специальное свойство `__caller__`, возвращающее объект активации вызывающей функции и, таким образом, позволяющее восстанавливать стек вызовов, было удалено по соображениям безопасности.

### Примечания

Обратите внимание, что в случае рекурсии, вы не сможете воссоздать стек вызовов, используя это свойство. Пусть у нас есть функции:


```js
function f(n) {
  g(n - 1);
}
function g(n) {
  if (n > 0) {
    f(n);
  } else {
    stop();
  }
}
f(2);
```


В момент вызова функции `stop()`, стек вызовов имеет следующий вид:
```

f(2) -> g(2) -> f(2) -> g(1) -> f(1) -> g(0) -> stop()
```


Следующее условие верно:
```

stop.caller === g && f.caller === g && g.caller === f
```


так что если вы попытаетесь оттрассировать стек в функции `stop()` подобным образом:


```js
var f = stop;
var stack = "Трассировка стека:";
while (f) {
  stack += "\n" + f.name;
  f = f.caller;
}
```


то этот цикл никогда не остановится.

Примеры
-------

### Пример: проверка значения свойства `caller` функции

Следующий код проверяет значение свойства `caller` функции.


```js
function myFunc() {
  if (myFunc.caller == null) {
    return "Эта функция была вызвана из верхнего уровня!";
  } else {
    return "Эта функция была вызвана из " + myFunc.caller;
  }
}
```

Спецификации
------------

Не является частью какой-либо спецификации. Реализована в JavaScript 1.5.

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* Ошибка реализации в SpiderMonkey: Firefox bug 65683
Function.prototype.toString()
=============================

Сводка
------

Метод **`toString()`** возвращает строку, представляющую исходный код функции.

Синтаксис
---------
```

function.toString(indentation)
```

### Параметры

`indentation` 
Non-standard

Количество пробелов для отступов в строковом представлении исходного кода. Если параметр меньше или равен `-1`, большинство ненужных пробелов будет удалено.

Описание
--------

Объект `Function` переопределяет метод `toString`, унаследованный из объекта `Object`; он не наследует метод `Object.prototype.toString`. Для объектов `Function` метод `toString` возвращает строку, представляющую объект в форме объявления функции. То есть, метод `toString` декомпилирует функцию и возвращает строку, включающую ключевое слово `function`, список аргументов, фигурные скобки и исходный код тела функции.

JavaScript вызывает метод `toString` автоматически в случае, когда объект `Function` представляется в качестве текстового значения, то есть, когда функция соединяется со строкой.

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-function.prototype.tostring |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Object.prototype.toString()`
Reflect.deleteProperty()
========================

Статический метод **`Reflect.deleteProperty()`** позволяет удалять свойства из объекта. Реализация данной функции схожа с оператором `delete`.

Интерактивный пример
--------------------

Синтаксис
---------
```

Reflect.deleteProperty(target, propertyKey)
```

### Параметры

`target`

Целевой объект в котором будет удалено свойство.

`propertyKey`

Имя удаляемого свойства.

### Возвращаемое значение

`Boolean` указывающий, было ли свойство успешно удалено.

### Исключения

Исключение `TypeError`, если `target` не является `Object`.

Описание
--------

Метод `Reflect.deleteProperty` позволяет вам удалить свойство объекта. Он возвращает `Boolean` указывающий, было ли свойство успешно удалено. Он так же идентичен оператору `delete` без использования строгого режима.

Примеры
-------

### Использования `Reflect.deleteProperty()`


```js
var obj = { x: 1, y: 2 };
Reflect.deleteProperty(obj, "x"); // true
obj; // { y: 2 }

var arr = [1, 2, 3, 4, 5];
Reflect.deleteProperty(arr, "3"); // true
arr; // [1, 2, 3, , 5]

// Возвращает true даже если такого свойства не существует
Reflect.deleteProperty({}, "foo"); // true

// Возвращает false если такое свойство ненастраиваемое
Reflect.deleteProperty(Object.freeze({ foo: 1 }), "foo"); // false
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-reflect.deleteproperty |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Reflect`
* `delete` operator
Reflect.defineProperty()
========================

Статический метод **`Reflect.defineProperty()`** похож на `Object.defineProperty()`, но возвращает `Boolean`.

Интерактивный пример
--------------------

Синтаксис
---------
```

Reflect.defineProperty(target, propertyKey, attributes)
```

### Параметры

`target`

Объект, в котором определяется свойство.

`propertyKey`

Имя определяемого или изменяемого свойства.

`attributes`

Атрибуты для определяемого или изменяемого свойства.

### Возвращаемое значение

Возвращается значение `Boolean`, указывающее было ли свойство успешно определено.

### Исключения

Исключение `TypeError`, если `target` не является `Object`.

Описание
--------

Метод `Reflect.defineProperty` позволяет точно дополнить или изменить свойство объекта. Для более подробной информации смотрите на аналогичный метод - `Object.defineProperty`. `Object.defineProperty` возвращает объект или выбрасывает исключение `TypeError`, если свойство не было успешно определено. `Reflect.defineProperty`, в любом случае, просто возвращает `Boolean`, указывающее было ли свойство успешно определено.

Примеры
-------

### Использования `Reflect.defineProperty()`


```js
var obj = {};
Reflect.defineProperty(obj, "x", { value: 7 }); // true
obj.x; // 7
```

### Проверка успешно ли было определено свойство

При использовании `Object.defineProperty`, который возвращал объект в случае успеха, либо выбрасывал исключение `TypeError`, вы должны были использовать конструкцию `try...catch` для того, чтобы поймать ошибку, которая случилась при определении свойства. Потому что `Reflect.defineProperty` возвращает `Boolean` в любом случае, вы можете использовать конструкцию `if...else`:


```js
if (Reflect.defineProperty(target, property, attributes)) {
  // успех
} else {
  // неудача
}
```

Спецификация
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-reflect.defineproperty |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Reflect`
* `Object.defineProperty()`
Reflect.ownKeys()
=================

Статический метод **`Reflect.ownKeys()`** возвращает массив имён, а также `Symbols` собственных полей объекта `target` .

Интерактивный пример
--------------------

Синтаксис
---------
```

Reflect.ownKeys(target)
```

### Параметры

`target`

Объект `target`, из которого получаем собственные ключи.

### Возвращаемое значение

Массив `Array` собственных полей объекта `target`.

### Исключения

Выбрасывает исключение `TypeError`, если `target` не является `Object`.

Описание
--------

Метод `Reflect.ownKeys` возвращает массив собственных ключей объекта `target`. Эквивалентом этого метода является ``Object.getOwnPropertyNames`(target).concat(`Object.getOwnPropertySymbols`(target))`.

Примеры
-------

### Использование `Reflect.ownKeys()`


```js
Reflect.ownKeys({ z: 3, y: 2, x: 1 }); // [ "z", "y", "x" ]
Reflect.ownKeys([]); // ["length"]

var sym = Symbol.for("comet");
var sym2 = Symbol.for("meteor");
var obj = {
  [sym]: 0,
  str: 0,
  773: 0,
  0: 0,
  [sym2]: 0,
  "-1": 0,
  8: 0,
  "second str": 0,
};
Reflect.ownKeys(obj);
// [ "0", "8", "773", "str", "-1", "second str", Symbol(comet), Symbol(meteor) ]
// Индексы в порядке их перечисления,
// Строки в порядке их ввода,
// Symbols в порядке их ввода
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-reflect.ownkeys |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Reflect`
* `Object.getOwnPropertyNames()`
Reflect.get()
=============

Статический метод **`Reflect.get()`** работает также, словно если бы мы получали свойство объекта (`target[propertyKey]`) с помощью функции.

Интерактивный пример
--------------------

Синтаксис
---------
```

Reflect.get(target, propertyKey[, receiver])
```

### Параметры

`target`

Объект, к свойству которого идёт обращение.

`propertyKey`

Название свойства, значение которого необходимо получить.

receiver Необязательный

Значение, которое получит переменная `this` при вызове геттера.

### Возвращаемое значение

Значение свойства `propertyKey`.

### Исключения

`TypeError`, если `target` не `Object`.

Описание
--------

Метод `Reflect.get` позволяет получить значение свойства некоторого объекта. Он похож на обычный доступ к значению свойства объекта значению свойства объекта, только с синтаксисом функции.

Примеры
-------

### Использование `Reflect.get()`


```js
// Объект
var obj = { x: 1, y: 2 };
Reflect.get(obj, "x"); // 1

// Массив
Reflect.get(["ноль", "один"], 1); // "один"

// Proxy, перехватывающий get
var x = { p: 1 };
var obj = new Proxy(x, {
  get(t, k, r) {
    return k + "bar";
  },
});
Reflect.get(obj, "foo"); // "foobar"
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-reflect.get |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Reflect`
* Property accessors
Reflect.apply()
===============

Статический метод **`Reflect.apply()`** вызывает переданную ему функцию с указанными аргументами.

Интерактивный пример
--------------------

Синтаксис
---------
```

Reflect.apply(target, thisArgument, argumentsList)
```

### Параметры

target

Функция, которую необходимо вызвать.

thisArgument

Значение переменной `this` во время вызова функции *`target`*.

argumentsList

Объект, подобный массиву, содержащий аргументы, с которыми должна быть вызвана функция *`target`*.

### Возвращаемое значение

Возвращается значение, которое вернёт функция *`target`* с указанным значением переменной **`this`** и аргументами.

### Исключения

`TypeError`, если функция `target` не может быть вызвана.

Описание
--------

В ES5, обычно используется метод `Function.prototype.apply()`, чтобы вызвать функцию с указанным значением переменной `this` и `arguments`, переданными как массив (или массивоподобный объект).


```js
Function.prototype.apply.call(Math.floor, undefined, [1.75]);
```


С использованием `Reflect.apply` это действие становится более понятным и занимает меньше места в коде.

Примеры
-------

### Использование `Reflect.apply()`


```js
Reflect.apply(Math.floor, undefined, [1.75]);
// 1;

Reflect.apply(String.fromCharCode, undefined, [104, 101, 108, 108, 111]);
// "hello"

Reflect.apply(RegExp.prototype.exec, /вы/, [
  "превысокомногорассмотрительствующий",
]).index;
// 4

Reflect.apply("".charAt, "пони", [3]);
// "и"
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-reflect.apply |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Reflect`
* `Function.prototype.apply()`
DataView.prototype.setInt16()
=============================

Метод **`setInt16()`** содержит 16-битное целое (short) значение в байте, смещённым по указанному числу от начала `DataView`.Интерактивный пример
--------------------

Синтаксис
---------
```

dataview.setInt16(byteOffset, value [, littleEndian])
```

### Параметры

byteOffset

Смещение в байтах от старта до этого значения, где будут храниться данные.

value

Устанавливаемое значение.

littleEndian

Необязательный Указывает, сохранять ли 16-bit целое в little- or big-endian (en-US) формате. Если значение false или undefined, записывает значение big-endian.

### Возвращаемое значение

`undefined`.

### Возвращаемые ошибки

`RangeError`

Выдана, если `byteOffset` установлен так, что целое бы хранилось после конца.

Примеры
-------

### Использование метода `setInt16`


```js
var buffer = new ArrayBuffer(8);
var dataview = new DataView(buffer);
dataview.setInt16(1, 3);
dataview.getInt16(1); // 3
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-dataview.prototype.setint16 |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `DataView`
* `ArrayBuffer`
DataView.prototype.setInt32()
=============================

Метод **`setInt32()`** экземпляров `DataView` принимает число и сохраняет его в форме 32-битного целого числа со знаком в 4 байтах начиная с определённого в этом `DataView` смещении. Ограничений по выравниванию нет, многобайтовые значения могут храниться с любым смещением в пределах границ.

Интерактивный пример
--------------------

Синтаксис
---------


```js
setInt32(byteOffset, value)
setInt32(byteOffset, value, littleEndian)
```

### Параметры

`byteOffset`

Смещение в байтах от начала `DataView`, в котором будут храниться данные.

`value`

Устанавливаемое значение. На данный момент значение кодируется в байтах.

`littleEndian` Необязательный

Указывает, в каком формате сохранять данные — с прямым или обратным порядком байтов (en-US) ("big-endian" или "little-endian"). Если `false` или `undefined`, значение записывается с прямым порядком байтов ("big-endian").

### Возвращаемое значение

`undefined`.

### Исключения

`RangeError`

Возникает, если `byteOffset` выходит за пределы `DataView`.

Примеры
-------

### Использование setInt32()


```js
const buffer = new ArrayBuffer(10);
const dataview = new DataView(buffer);
dataview.setInt32(0, 3);
dataview.getInt32(1); // 768
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-dataview.prototype.setint32 |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* Типизированные массивы в JavaScript
* `DataView`
* `ArrayBuffer`
* `Int32Array`