以下JavaScript中"function(i)"中的"i"是什么?

ast*_*ght 7 javascript jquery

在下面的代码中有"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');
      }}
   );
});
Run Code Online (Sandbox Code Playgroud)

看起来它可能类似于c ++"this"语句.这是否正确?

Rob*_*Rob 11

它看起来像一个函数声明:

function(i)
{
  // .....
}
Run Code Online (Sandbox Code Playgroud)

因此i,传递给函数的值(作为匿名函数被内联声明)作为其第一个参数,可能retarder是您将函数传递给的方法的内部工作方式.

重新编写代码,以便它是一个有点更具可读性,使这更清楚一点:

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'); 
          }
       } 
    );
  }
 );
Run Code Online (Sandbox Code Playgroud)

然后你可以重写它甚至更清楚:

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'); 
}
Run Code Online (Sandbox Code Playgroud)

  • 又名.一个`论证` (6认同)

Rao*_*uke 7

这是一个函数参数.


muh*_*ten 5

它创建一个匿名函数,它接受一个参数,然后i在函数中引用它.


Mar*_*cka 4

i只是由函数传递retarder给匿名函数的函数参数。

它的作用是:

ul.css({width: 10, overflow: 'visible'}).retarder(100, callback_function);
Run Code Online (Sandbox Code Playgroud)

回调是通过匿名函数定义的:

function(i) { ... }  
Run Code Online (Sandbox Code Playgroud)

这i就是匿名函数参数的定义。