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。
答案 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."