3 / 3 / 0
Регистрация: 07.02.2015
Сообщений: 24
1

В данном коде сделать замыкания

13.02.2015, 10:38. Показов 709. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function cycl (interval, time) {
        for (i = 0; i<li.length; i++) {
        if (i!=s) {
            if (li[i].style.height!='0em') {
                function first(){
                    (function (i, interval, time) { hide(i, interval, time);}) (i, interval, time);
                };
                setTimeout(first, 10);
            } else {
                function second(){
                    (function (i, interval, time) {show(i, interval, time);}) (i, interval, time);
                };
                setTimeout(second, 10);
            };
        };
        };
    };
С другим участком кода была такая же проблема - Uncaught TypeError: Cannot read property 'style' of undefined.
Помогли замыкания. Эту тему я знаю очень плохо.
Так вот. Помогите, пожалуйста, сделать замыкания в данном коде, чтобы правильно пременные передавались.
Буду благодарен!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2015, 10:38
Ответы с готовыми решениями:

Как сделать сериализацию и десериализацию в данном коде?
Patient: id, Фамилия, Имя, Отчество, Адрес, Телефон, Номер медицинской карты, Диагноз. Создать...

Не могу понять как сделать переменную в данном коде
Привет, не могу понять как сделать переменную в данном коде... &quot;nextPlatformLeft.y + 0.86f, 0.1f&quot;...

Как сделать круговое движение квадрата в данном коде?
public partial class Form1 : Form { int x = 300; int y = 500; ...

Как сделать так, чтобы вводимые мной числа в данном коде отображались в проекте
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,...

2
Модератор
771 / 352 / 142
Регистрация: 17.07.2013
Сообщений: 992
13.02.2015, 17:35 2
grytsiuko, на деле замыкания достаточно просты. ( Если разобраться )
Как это работает. У каждой функции есть область видимости, эта область видимости поднимается вверх, но не в низ!
Javascript
1
2
3
4
5
6
7
var first = 1;
/* тут вообще видна только одна переменная first */
function func () {
   var second = 2; 
   /*тут видны переменные first,second, но не third!! */
   function func2 () { /* тут видны переменные first, second, third */ var third = 3}
}
Что значит видна? Это значит мы можем ее использовать, грубо говоря в любой момент кода, есть некий список переменных который доступен ( текущая ОВ ( область видимости ) и чаще всего все, что выше )
ОВ - это как раз ваша проблема
Допустим мы хотим повесить на все обработчики функцию, которая выводит порядковый номер

Javascript
1
2
3
4
5
6
function showNum(els) {
    // els - массив элементов
    for(var i in els) {
        els[i].onclick = function () { alert(i) };
    }
}
сслыка на пример


Но если мы сейчас будем нажимать на элементы, то нам будет показывать всегда одно и то же число! Почему?!
Если посмотреть, то наша функция делает вот что: при вызове запрашивает значение переменной i. Чем равна i?
На момент выполнения скрипта i == размеру массива, потому что цикл уже прошел, и i приняла конечное значение
Как это исправить? (смотрите в следующей серии)

Добавлено через 10 минут
Часть два:
Что бы исправить баг в первой части, нам нужно как то для каждого элемента сохранить свою i, тут то и поможет замыкание! Вся магия в том, что в javascript есть самовызывающиеся функции, то есть те функции которые вызывают сами себя, сразу, синтаксис такой
Javascript
1
2
3
(function (name) {
   alert("name")
})("JS")
Исправим наш пример, с помощью этих функций

Исправление
1
3 / 3 / 0
Регистрация: 07.02.2015
Сообщений: 24
13.02.2015, 21:22  [ТС] 3
СПАСИБО!!!!!!!!!!!!
0
13.02.2015, 21:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2015, 21:22
Помогаю со студенческими работами здесь

Замыкания, и замыкания в объекте. Где данные?
Помогите пожалуйста разобраться где хранятся данные. Ниже 2 примера. В первом все вроде как понятно...

Значение this в данном коде ?
var Person = { greeting: function(name,age,gender){ this.name = name; this.age = age;...

Что не так в данном коде?
Я хочу, чтобы определялось минимальное число членов ряда в цикле. Задаю начальное условие, что моё...

Что делает (->) в данном коде
TInfo Info; TElem *Elem = new TElem; Elem-&gt;Info.Ball = Info.Ball; Не нашел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru