在下面的代码中有"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)
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就是匿名函数参数的定义。