Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.06.2014, 23:55
Новичок на форуме
Отправить личное сообщение для Dionid Посмотреть профиль Найти все сообщения от Dionid
 
Регистрация: 11.06.2014
Сообщений: 9

Не могу разобраться, как работает функция
Доброго времени суток.
Вот функция, которую нашел в одном учебнике. Сразу задам вопрос: Как работает функция equals? Думаю, весь код не нужно читать, нужны предпоследняя и предпредпоследние функции:


function forEach(array, action) {
    "use strict";
    var i = 0;
    for (i = 0; i < array.length; i += 1) {
        action(array[i]);
    }
}

function reduce(combine, base, array) {
    "use strict";
    forEach(array, function (e) {
        base = combine(base, e);
    });
    return base;
}

function count(test, array) {
  return reduce(function(total, element) {
    return total + (test(element) ? 1 : 0);
  }, 0, array);
}

function equals(x) {
  return function(element) {return x === element;};
}

function countZeroes(array) {
  return count(equals(0), array);
}


Я не понимаю, как elements попадает внутрь функции и выходит булъиновое значение...
Ведь по-идее любое число в equals становится переменной X, а как тогда они производят сразвнение с elements, которое вообще определяется в функциях на уровни выше?
Ответить с цитированием
  #2 (permalink)  
Старый 21.06.2014, 04:04
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Аргумент x передается при вызове equals, а аргумент element передается при вызове вложенной функции. В данном случае x (== 0) передается в 28 строке, а element будет передаваться в 19 строке (каждый элемент массива).
Ответить с цитированием
  #3 (permalink)  
Старый 21.06.2014, 12:21
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

в equals находится замыкание. в нете есть куча статей по поводу замыканий, удачи
Ответить с цитированием
  #4 (permalink)  
Старый 21.06.2014, 16:41
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Сообщение от Dionid
Я не понимаю, как elements попадает внутрь функции и выходит булъиновое значение...
Вопрос поставлен не совсем корректно. Elements не попадает внутрь функции equals, это функция equals возвращает функцию, которая содержит в своем локальном скопе значение x. Затем уже эта возвращенная функция принимает аргумент.
Ответить с цитированием
  #5 (permalink)  
Старый 21.06.2014, 18:14
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,134

совсем на пальцах =)
<script>
function eguals (x) {
  return function(element) {return x === element;}
}

/* значение возвращает функция eguals а не анонимная функция "function(element)"
eguals возвращает анонимную функцию*/
alert  ("1. = " + eguals ( window ) ) ;



/* первая часть  "eguals (a)" вернет функцию 
переменная "x" останется в замыкании и будет доступна внутри функции eguals 
т.е. анонимной функции которая возвращается с помощью return 
вторая часть "(b)" это код вызывает анонимную функцию которую вернула первая  часть 
*/
var a = window;
var b = document;
var c = this;

alert  ("2. = " + ( eguals (a)(b) ));
alert  ("3. = " + ( eguals (a)(c) ));
alert  ("4. = " + ( eguals (a)(a) ));

</script>

Последний раз редактировалось MallSerg, 21.06.2014 в 20:05.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтобы функция сработала для подргуженого контента? olexand777 jQuery 5 28.01.2013 17:54
Почему не работает функция? Редактировать Isaac Общие вопросы Javascript 16 18.12.2012 16:22
написал коряво плагин на JS - он работает, а как сделать лучше? Теги: Массив, replace alexben Общие вопросы Javascript 2 11.02.2012 15:21
Функция изменения DOM, нужно разобраться что и как fiw Общие вопросы Javascript 1 03.11.2011 08:43
Не могу понять как работает jQuery kostiaGt jQuery 2 20.07.2008 08:42