Kaynağa Gözat

finish HW10 closures

serg155alternate 2 yıl önce
ebeveyn
işleme
d79313e108
1 değiştirilmiş dosya ile 16 ekleme ve 32 silme
  1. 16 32
      HW10 Closures and scopes/script.js

+ 16 - 32
HW10 Closures and scopes/script.js

@@ -98,7 +98,7 @@ function countdown() {
 
 
 /* 
-//))cheeter
+//cheeter
 let counter = 5;
 function countdown() {
     console.log(counter);
@@ -119,44 +119,28 @@ let int1 = setInterval(() => {countdown()}, 1000); */
 
 //myBind
 
-/* let pow5 = myBind(Math.pow, Math, [undefined, 5]) // первый параметр - функция для биндинга значений по умолчанию, 
-                                                  // второй - this для этой функции, третий - массив, в котором undefined означает
-                                                  // параметры, которые должны передаваться при вызове,
-                                                  // а другие значения являются значениями по умолчанию:
-let cube = myBind(Math.pow, Math, [undefined, 3]) // cube возводит число в куб
-
-pow5(2) // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5]
-cube(3) // => 27
-
-
-let chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9])
-chessMin(-1,-5,3,15) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
-
-
-
-let zeroPrompt = myBind(prompt, window, [undefined, "0"]) // аналогично, только теперь задается "0" как текст по умолчанию в prompt, 
-                                                          // а текст приглашения пользователя задается при вызове zeroPrompt
-let someNumber = zeroPrompt("Введите число")              // вызывает prompt("Введите число","0")
-
-myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d') === 'abcdef' */
-
-
 function myBind(func, funcThis, arr) {
-    let funcRes = func.bind(...arr);
-    console.log(arr);
-    function retFunc(...params) {
-        console.log(arr);
-        console.log(params);
-        return funcRes(...params);
+    return function retFunc(...params) {
+        let count = 0;
+        for (let el in arr){
+            if(arr[el] === undefined) {
+                arr[el] = params[count];
+                count++;
+            } 
+        }
+        return func.apply(funcThis, arr);
     }
-    return retFunc;
 }
 
 
-console.log(myBind(Math.pow, Math, [undefined, 5]));
+let pow5 = myBind(Math.pow, Math, [undefined, 5])
+console.log(pow5(2));
 console.log(myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a', 'c', 'd'));
+let chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9])
+console.log(chessMin(-1,-5,3,15)) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
 
-
+//let zeroPrompt = myBind(prompt, window, [undefined, "0"]) // аналогично, только теперь задается "0" как текст по умолчанию в prompt,                                             // а текст приглашения пользователя задается при вызове zeroPrompt
+//let someNumber = zeroPrompt("Введите число")              // вызывает prompt("Введите число","0")