|
@@ -216,7 +216,6 @@ alert("Сумма квадратов: " + (sqr1 + sqr(otherVar + otherVar)));
|
|
|
В **Javascript** количество параметров при определении и при вызове может отличаться. Это не вызывает ошибок. В таком случае непереданные параметры равны
|
|
|
`undefined`:
|
|
|
```javascript
|
|
|
-debugger;
|
|
|
function add(a,b)
|
|
|
{
|
|
|
a = a || 0;
|
|
@@ -232,7 +231,6 @@ alert(add(2,3));
|
|
|
Если же параметров больше, чем указано в определении функции, то ошибки тоже не происходит. Для доступа к полям существует **псевдомассив**
|
|
|
`arguments`, который всегда содержит актуальный набор параметров, переданных при вызове.
|
|
|
```javascript
|
|
|
-debugger;
|
|
|
function add(a,b)
|
|
|
{
|
|
|
console.log(arguments)
|
|
@@ -265,18 +263,42 @@ manyAdd(4,5,6,7)
|
|
|
manyAdd(...[4,5,6,7])
|
|
|
```
|
|
|
|
|
|
-
|
|
|
**Задание**
|
|
|
|
|
|
Используя перебор массива `arguments` циклом `for`, сделайте функцию, которая складывает любое количество параметров
|
|
|
|
|
|
+#### **ES6** параметры по умолчанию
|
|
|
+
|
|
|
+Во многих языках программирование существует подход *параметров по умолчанию* - параметров, значение которых подставляется в случае, когда параметры не указаны.
|
|
|
+Такой возможности не было в **ES5**, для этого обычно использовали **ИЛИ** (`||`). Однако параметры по умолчанию появились в **ES6**, что упрощает код:
|
|
|
+
|
|
|
+```javascript
|
|
|
+function mul(a=1,b=1)
|
|
|
+{
|
|
|
+ console.log(arguments)
|
|
|
+ return a * b;
|
|
|
+}
|
|
|
+
|
|
|
+mul(10,10)
|
|
|
+mul(5)
|
|
|
+mul()
|
|
|
+```
|
|
|
+
|
|
|
+Учтите, что вы не может пропустить один параметр, но при этом указать дальнейшие:
|
|
|
+
|
|
|
+```javascript
|
|
|
+mul(,10) //попытка сделать a по умолчанию, но указать при этом b
|
|
|
+mul(1,10) //правильный способ
|
|
|
+```
|
|
|
+
|
|
|
+Таким образом, если вы хотите "пропустить" параметр, всё равно придется его указать. Посему обычно параметры по умолчанию идут в конце списка параметров, чем дальше - тем более умолчательные параметры идут.
|
|
|
+
|
|
|
### Возвращаемое значение
|
|
|
|
|
|
Для возврата значения используется `return`. У него три основных свойства:
|
|
|
- Собственно возврат значения во внешний код. Выражение после `return` *вычисляется в контексте функции*:
|
|
|
|
|
|
```javascript
|
|
|
-debugger;
|
|
|
function add(a,b)
|
|
|
{
|
|
|
return a + b;
|
|
@@ -289,7 +311,6 @@ alert(add(3,4))
|
|
|
- `return` без параметра возвращает *ничего*, т. е. `undefined`:
|
|
|
|
|
|
```javascript
|
|
|
-debugger;
|
|
|
function bigAndWeirdFunction()
|
|
|
{
|
|
|
var somethingBad = Math.random() > 0.5;
|
|
@@ -359,7 +380,6 @@ alert("global a after function execution" + a);
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
-debugger;
|
|
|
function add(a,b)
|
|
|
{
|
|
|
var result = a + b;
|
|
@@ -380,7 +400,6 @@ add(5,6)
|
|
|
В ES6 это вызывает ошибку.
|
|
|
|
|
|
```javascript
|
|
|
-debugger;
|
|
|
function add(a,b)
|
|
|
{
|
|
|
result = a + b;
|
|
@@ -629,7 +648,6 @@ function validatedPrompt(message, defaultValue, validator)
|
|
|
} while( value !== null && !validator(value));
|
|
|
return value;
|
|
|
}
|
|
|
-debugger;
|
|
|
alert(validatedPrompt("number", "", function(value) {
|
|
|
return !isNaN(+value) && Number.isInteger(+value)
|
|
|
}))
|