Kaynağa Gözat

05Func Adv ES6

Ivan Asmer 7 yıl önce
ebeveyn
işleme
e53c7cdc6c
1 değiştirilmiş dosya ile 26 ekleme ve 8 silme
  1. 26 8
      A/05Functions.md

+ 26 - 8
A/05Functions.md

@@ -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) 
 }))