В следующем коде есть "function (i)", но «i» нигде не было объявлено до этого оператора.
ul.css({width: 10, overflow: 'visible'}).retarder(100, function(i){
i.css('visibility', 'visible').animate(
{width: ul[0].wid,left:-50},
{duration: 500, complete : function(){
ul.css('overflow', 'visible');
}}
);
});
Похоже, что он может быть похож на c ++ оператор «this». Это вообще правильно?
i
- это просто параметр функции, который передается функцией замедлителя
анонимной функции.
Что он делает:
ul.css({width: 10, overflow: 'visible'}).retarder(100, callback_function);
и обратный вызов определяется через анонимную функцию:
function(i) { ... }
Таким образом, i
является определением параметра анонимной функции.
он создает анонимную функцию, которая принимает единственный аргумент, который затем будет обозначаться в функции как i
.
Причина, по которой вы этого не понимаете, заключается в том, что вы не знакомы с использованием анонимных функций в JavaScript. Вы, вероятно, более знакомы с чем-то вроде:
function double(i){
return i + i;
}
i
- параметр функции double
. В JavaScript ту же функцию можно выполнить следующим образом:
var double = function(i){
return i + i;
};
В этом случае создается анонимная функция, которая затем присваивается переменной double
. i
все еще является параметром. Тогда оба могут быть вызваны как double (3)
.
В приведенном вами примере вместо присвоения анонимной функции переменной она была передана в качестве аргумента другой функции.
Это похоже на объявление функции:
function(i)
{
// .....
}
Итак i
- это значение, передаваемое в функцию (которая объявляется встроенной как анонимная функция ) в качестве своего первого параметра, предположительно внутренней работой метода замедлителя
, в который вы передаете функцию.
Переписывание кода, чтобы он стал бит более читаемым, чтобы сделать его немного понятнее:
ul.css(
{
width: 10,
overflow: 'visible'
}
).retarder(100, function(i)
{
i.css('visibility', 'visible').animate(
{
width: ul[0].wid,
left:-50
},
{
duration: 500,
complete: function()
{
ul.css('overflow', 'visible');
}
}
);
}
);
И вы можете затем переписать его, чтобы он был даже более понятным:
ul.css(
{
width: 10,
overflow: 'visible'
}
).retarder(100, functionToPassToRedtarder);
function functionToPassToRetarder(i)
{
i.css('visibility', 'visible').animate(
{
width: ul[0].wid,
left:-50
},
{
duration: 500,
complete: functionToPassToComplete
}
);
}
function functionToPassToComplete()
{
ul.css('overflow', 'visible');
}
Переменная i в объявлении анонимной функции function (i) - это имя, используемое для первого параметра внутри тела функции. Он не соответствует ни одной переменной где-либо еще на вашей странице.
Переменная i
представляет фактический объект (например, ключевое слово this
)
Объясните подробнее:
1) Является параметром анонимной функции, как мы видим:
.retarder(100, function(i){...})
2) Является ссылкой на текущий объект ( this
).
Когда этот плагин jquery завершает работу, он вызывает функцию обратного вызова, используя:
(callbackFunction)(this)
Где это параметр.