【问题标题】:How SetTimeout Function's Time parameter works in JavascriptSetTimeout 函数的时间参数在 Javascript 中的工作原理
【发布时间】:2014-02-27 06:09:46
【问题描述】:
 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)是如何工作的? setTimeout 在 for 循环内。在 for 循环中使用 SetTimeout 感到困惑。

【问题讨论】:

标签: javascript settimeout


【解决方案1】:

代码似乎运行良好。

但如果你更想理解它,你最终可能会选择 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." 

【讨论】:

    【解决方案2】:

    您应该明白(function(arg){})(d) 定义了一个匿名函数并立即使用参数d 调用它

    【讨论】:

    • 是的,我知道这一点,但是 d 是怎么来的,什么时候会及时得到原因 100
    • 我不确定我是否理解你,d 在 for 循环中声明:for(var d = 0; d &lt; 3; d++)@MohammadFaizankhan
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2011-10-07
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2013-08-15
    • 2015-02-26
    相关资源
    最近更新 更多