SetTimeout函数的Time参数如何在Javascript中工作

时间:2014-02-27 06:09:47

标签: javascript settimeout

 for ( var d = 0; d < 3; d++ )
        (function(d)
        {
            setTimeout(
                    function()
                    {
                        console.log( "Value of d: ", d );
                        console.log( d == d, "Check the value of d." );
                    }, d * 200);
        })(d);

时间参数(d)如何工作? for循环中的setTimeout。混淆在for循环中使用SetTimeout。

2 个答案:

答案 0 :(得分:0)

可能你应该理解(function(arg){})(d)定义了一个匿名函数,immediataly用一个参数调用它d

答案 1 :(得分:0)

代码似乎工作正常。

但是如果你想要了解它,你最终可能会获得JS的进口交易。关闭

首先像这样运行

for ( var d = 0; d < 3; d++ )       
      setTimeout(function() {
                    console.log( "Value of d: ", d );
                    console.log( d == d, "Check the value of d." );
                }, d * 200);

输出:

Value of d:  3 
true "Check the value of d." 
Value of d:  3 
true "Check the value of d." 
Value of d:  3 
true "Check the value of d." 

您是否注意到d的非递增值?这是因为在实际执行任何setTimeout函数之前d的值变为3。所以你需要的是d的三个副本,其值为1,2,3。

这可以通过执行立即功能来实现。在定义setTimeout函数本身时保存d的值。我们基本上做的是将每个调用包装在一个范围内,稍后可以访问d(在setTimeout函数启动之后)。

因此你的代码:

for ( var d = 0; d < 3; d++ ) (function(d) {
            setTimeout(function() {
                        console.log( "Value of d: ", d );
                        console.log( d == d, "Check the value of d." );
                    }, d * 200);
        })(d);

产生输出:

Value of d:  0
true "Check the value of d."
Value of d:  1
true "Check the value of d."
Value of d:  2
true "Check the value of d."