在JavaScript中的setTimeout方法中混淆参数

时间:2014-05-03 12:38:33

标签: javascript parameters

在以下函数中,参数(from,to)位于px中。在代码中代码行:setTimeout(' slideLogo(' +来自+',' +到+')',75);包含这么多加号,我在这里很困惑。除此之外,如此多的单引号(')也非常令人困惑。请帮我清除这一部分。

function slideLogo(from, to) {
             if (from < to) {
                company.top = (from += 10);
                setTimeout('slideLogo(' + from + ',' + to + ')', 75);
            }
            else initObjects();
}

4 个答案:

答案 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();
}

代码包含setTimeoutsetTimeout的第一个参数是匿名function,会调用slideLogo function,并传递fromto个参数。 setTimeout的第二个参数是在执行匿名75之前要等待的时间(function毫秒)。