Added new translation (Russian) and corrected existing (#22482)

* Update index.md

* Updated and corrected translation

* update: 2 space indentation
pull/24710/head^2
arsts 2018-10-30 21:12:16 +03:00 committed by Gregory Gubarev
parent 6916c2691d
commit d9249e5f28
1 changed files with 66 additions and 39 deletions

View File

@ -2,52 +2,73 @@
title: Arguments
localeTitle: аргументы
---
Объект arguments - это **объект, подобный массиву** _(в том, что структура объекта аналогична структуре массива, однако он не должен рассматриваться как массив, поскольку он обладает всеми функциональными возможностями объекта), в_ котором хранятся все аргументы, которые вы передается функции и, в частности, принадлежит этой функции. Если вы должны были передать 3 аргумента функции, скажем, `storeNames()` , эти 3 аргумента будут храниться внутри объекта с **аргументами,** и это будет выглядеть так, когда мы передадим аргументы `storeNames("Mulder", "Scully", "Alex Krycek")` к нашей функции:
Объект arguments - это **объект, подобный массиву** _(в том, что структура объекта аналогична структуре массива, однако он не должен рассматриваться как массив, поскольку он обладает всеми функциональными возможностями объекта)_ , вкотором хранятся все аргументы, которые вы передается функции и, в частности, принадлежит этой функции. Если вы должны были передать 3 аргумента функции, скажем, `storeNames()` , эти 3 аргумента будут храниться внутри объекта с **аргументами,** и это будет выглядеть так, когда мы передадим аргументы `storeNames("Mulder", "Scully", "Alex Krycek")` к нашей функции:
* Сначала мы объявляем функцию и возвращаем объект arguments.
\`\` \`Javascript
```Javascript
function storeNames () {return arguments; }
```
* Then, when we execute that function with **n arguments**, 3 in this case, it will return the object to us and it will **look like** an array. We can convert it to an array, but more on that later...
*Затем, когда мы выполним функцию с **n количеством аргументов***, в нашем случае 3 аргумента, нам вернтся объект, который будет ***выглядеть как массив***. Мы можем превратить его в массив, но об этом позже...
```Javascript
// Если мы выполним следующую строку в консоли:
storeNames ('Малдер', 'Скалли', 'Алекс Крайчек');
// Вывод будет {'0': 'Малдер', '1': 'Скалли', '2': 'Alex Kryceck'}
```
Javascript // Если мы выполним следующую строку в консоли: storeNames («Малдер», «Скалли», «Алекс Крайчек»); // Выход будет {'0': 'Mulder', '1': 'Scully', '2': 'Alex Kryceck'}
```
Если вы хотите узнать больше, например, о превращении в массив или о проблеме оптимизации при использовании метода _slice_(_) и о том, как её решить, кликайте **read more** (Только для Gitter Chat).
If you want to know more about this, such as converting it to an array or the optimization problem that comes with using the _slice(_) method and how to solve it, click on **read more** (Gitter Chat Only).
## Treat it as an array
## Относитесь к arguments, как к массиву
You can invoke arguments by using `arguments[n]` (where _n_ is the index of the argument in the array-like object) but if you want to use it as an array for iteration purposes or applying array methods to it, you need to _convert it to an array_ by declaring a variable and using the Array.prototype.slice.call method (because _arguments_ is not an array):
Вы можете вызвать arguments с помощью `arguments[n]` (где _n_ это индекс аргумента в объекте подобном массиву), но если вы хотите использовать его, как массив для применения циклов или методов массивов к нему, нужно _превратить его в массив_ объявив переменную и используя метод Array.prototype.slice.call (потому, что _arguments_ это не массив):
```javascript
var args = Array.prototype.slice.call(arguments);
// или способ es6:
var args = Array.from(arguments)
```
Поскольку **slice()** имеет (параметр **end** необязательный) два параметра, вы можете захватить определенную часть arguments уточнив (при сипользовании метода _slice.call()_ оба этих параметра необязательны, не только _end_) начало и окончание нужной части; обратите внимание на следующий код:
```javascript
function getGrades() {
var args = Array.prototype.slice.call(arguments, 1, 3);
return args;
}
// Теперь выведем это!
console.log(getGrades(90, 100, 75, 40, 89, 95));
// ВЫВОД ДОЛЖЕН БЫТЬ ТАКИМ: //
// [100, 75] <- Почему? Потому, что он начинался с индекса 1 и останавливался при индексе 3
// поэтому индекс 3 (40) не был учтен.
//
// Если мы удалим параметр «3», оставив только (arguments, 1), мы получим
// каждый аргумент из индекса 1: \[100, 75, 40, 89, 95\].
```
Javascript var args = Array.prototype.slice.call (аргументы);
### Проблемы Оптимизации с Array.slice()
// или способ es6: var args = Array.from (аргументы)
```
Since **slice()** has two (the parameter **end** is optional) parameters, you can grab a certain portion of the arguments by specifying (using the _slice.call()_ method renders these two parameters optional, not just _end_) the beginning and the ending of your portion; check out the following code:
```
Есть маленькая проблема, не рекомендуется использовать _slice_ в объекте arguments (по причинам оптимизации)...
Javascript функция getGrades () { var args = Array.prototype.slice.call (аргументы, 1, 3); return args; }
> **Важно**: Не следует использовать _slice_ с arguments потому, что не сработает оптимозация в движках JavaScript (напр. V8).
Вместо этого попробуйте создвть новый массив запустив цикл через объект arguments.
>
> _согласно_ **_Mozilla Developer Network_** <a href='https://developer.mozilla.org/ca/docs/Web/JavaScript/Reference/Functions/arguments' target='_blank' rel='nofollow'>(reference)<a>
// Давайте выводим это! console.log (getGrades (90, 100, 75, 40, 89, 95));
// ВЫХОД ДОЛЖЕН БЫТЬ: // // \[100, 75\] <- Почему? Поскольку он начинался с индекса 1 и останавливался при индексе 3 // поэтому индекс 3 (40) не был учтен. // // Если мы удалим параметр «3», оставив только (аргументы, 1), мы получим // каждый аргумент из индекса 1: \[100, 75, 40, 89, 95\].
```
### Optimization issues with Array.slice()
There is a little problem, it's not recommended to use slice in the arguments object (optimization reasons)...
> **Important**: You should not slice on arguments because it prevents optimizations in JavaScript engines (V8 for example). Instead, try constructing a new array by iterating through the arguments object.
>
> _by_ **_Mozilla Developer Network_** <a href='https://developer.mozilla.org/ca/docs/Web/JavaScript/Reference/Functions/arguments' target='_blank' rel='nofollow'>(reference)<a>
So, what other method is available to convert _arguments_ to an array? I recommend the for-loop (not the for-in loop), you can do it like this:
```
Итак, какие еще методы доступны для превращения _arguments_ в массив? Я рекомендую цикл for (не for-in), можете сделать так:
Javascript var args = \[\]; // Пустой массив, сначала. for (var i = 0; i <arguments.length; i ++) { args.push (аргументы \[I\]) } // Теперь «args» - это массив, содержащий ваши аргументы. \`\` \`
```javascript
var args = []; // Пустой массив, сперва.
for (var i = 0; i <arguments.length; i ++) {
args.push(arguments[i])
} // Теперь «args» - это массив, содержащий ваши аргументы.
```
Для получения дополнительной информации по вопросам оптимизации:
Убийцы оптимизации: [управляющие аргументы](https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#3-managing-arguments)
@ -55,25 +76,31 @@ Javascript var args = \[\]; // Пустой массив, сначала. for (v
### Параметр остатка ES6 как способ обхода объекта аргументов
В ES2015 / ES6 можно использовать параметр rest ( `...` ) вместо объекта arguments в большинстве мест. Скажем, у нас есть следующая функция (не-ES6):
```
```javascript
function getIntoAnArgument() {
var args = arguments.slice();
args.forEach(function(arg) {
console.log(arg);
});
}
var args = arguments.slice();
args.forEach(function(arg) {
console.log(arg);
});
}
```
Эту функцию можно заменить в ES6:
```
function getIntoAnArgument(...args) {
args.forEach(arg => console.log(arg));
}
args.forEach(arg => console.log(arg));
}
```
обратите внимание, что мы также использовали функцию стрелки для сокращения обратного вызова forEach!
Обратите внимание, что мы также использовали стрелочную функцию для сокращения обратного вызова forEach!
Объект arguments недоступен внутри тела функции стрелки.
Объект arguments недоступен внутри тела стрелочной функции.
Параметр rest всегда должен быть последним аргументом в определении вашей функции.
`function getIntoAnArgument(arg1, arg2, arg3, ...restOfArgs /*no more arguments allowed here*/) { //function body }`
```
function getIntoAnArgument(arg1, arg2, arg3, ...restOfArgs /*no more arguments allowed here*/) {
//function body
}
```