Что такое «i» в «функции (i)» в следующем JavaScript?

В следующем коде есть "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». Это вообще правильно?

7
задан Justin Ethier 20 August 2010 в 20:22
поделиться

7 ответов

i - это просто параметр функции, который передается функцией замедлителя анонимной функции.

Что он делает:

ul.css({width: 10, overflow: 'visible'}).retarder(100, callback_function);

и обратный вызов определяется через анонимную функцию:

function(i) { ... }  

Таким образом, i является определением параметра анонимной функции.

4
ответ дан 6 December 2019 в 05:54
поделиться

он создает анонимную функцию, которая принимает единственный аргумент, который затем будет обозначаться в функции как i .

5
ответ дан 6 December 2019 в 05:54
поделиться

Причина, по которой вы этого не понимаете, заключается в том, что вы не знакомы с использованием анонимных функций в JavaScript. Вы, вероятно, более знакомы с чем-то вроде:

function double(i){
    return i + i;
}

i - параметр функции double . В JavaScript ту же функцию можно выполнить следующим образом:

var double = function(i){
    return i + i;
};

В этом случае создается анонимная функция, которая затем присваивается переменной double . i все еще является параметром. Тогда оба могут быть вызваны как double (3) .

В приведенном вами примере вместо присвоения анонимной функции переменной она была передана в качестве аргумента другой функции.

2
ответ дан 6 December 2019 в 05:54
поделиться

Это похоже на объявление функции:

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'); 
}
11
ответ дан 6 December 2019 в 05:54
поделиться

Это функциональный параметр.

7
ответ дан 6 December 2019 в 05:54
поделиться

Переменная i в объявлении анонимной функции function (i) - это имя, используемое для первого параметра внутри тела функции. Он не соответствует ни одной переменной где-либо еще на вашей странице.

1
ответ дан 6 December 2019 в 05:54
поделиться

Переменная i представляет фактический объект (например, ключевое слово this )


Объясните подробнее:

1) Является параметром анонимной функции, как мы видим:

.retarder(100, function(i){...})

2) Является ссылкой на текущий объект ( this ).

Когда этот плагин jquery завершает работу, он вызывает функцию обратного вызова, используя:

(callbackFunction)(this)

Где это параметр.

0
ответ дан 6 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: