在以下函数中,参数(from,to)位于px中。在代码中代码行:setTimeout(' slideLogo(' +来自+',' +到+')',75);包含这么多加号,我在这里很困惑。除此之外,如此多的单引号(')也非常令人困惑。请帮我清除这一部分。
function slideLogo(from, to) {
if (from < to) {
company.top = (from += 10);
setTimeout('slideLogo(' + from + ',' + to + ')', 75);
}
else initObjects();
}
答案 0 :(得分:0)
如果
从= 10 和 到= 20
代码会读取
function slideLogo(from, to) {
if (from < to) {
company.top = (from += 10);
setTimeout('slideLogo(10, 20), 75);
}
else initObjects();
}
代码中的+用作字符串concatinator。 &#39;分隔硬编码的字符串,然后+将变量添加到该字符串。
答案 1 :(得分:0)
当使用加号并且其中一个值是一个字符串时,加号将这些值作为字符串汇总在一起,因此在这种情况下,变量中的字符串只是连接到传递给setTimeout的字符串中。这是一个例子
var from = '10';
var to = 40;
var fn = 'slideLogo(' + from + ',' + to + ')'; // result == "slideLogo(10,40)"
但是,将字符串传递给setTimeout与评估字符串相同,这是不好的做法。
最好看起来像这样
function slideLogo(from, to) {
if (from < to) {
company.top = (from += 10);
setTimeout(function() {
slideLogo(from, to);
}, 75);
} else {
initObjects();
}
}
答案 2 :(得分:0)
正如PhistucK在评论中提到的那样,将字符串传递给setTimeout
被认为是不安全的。您可以创建一个这样的匿名函数:
setTimeout(function() {
slideLogo(from, to);
}, 75);
或者,传入绑定函数,如下所示:
setTimeout(slideLogo.bind(null, from, to), 75);
答案 3 :(得分:0)
清理你的代码:
function slideLogo(from, to) {
if (from < to) {
company.top = (from += 10);
setTimeout(function() {
slideLogo(from, to);
}, 75);
}
else initObjects();
}
代码包含setTimeout
。 setTimeout
的第一个参数是匿名function
,会调用slideLogo
function
,并传递from
和to
个参数。 setTimeout
的第二个参数是在执行匿名75
之前要等待的时间(function
毫秒)。