包含闭包时,setTimeout不起作用

时间:2017-09-01 07:19:27

标签: javascript

所以我有这段代码......

 var string = 'qwe';

 document.addEventListener('click', function(e){

    function bar(b){

       var a = string[b];
       if (a == 'q') {
          console.log('first');
       }
       if (a == 'w') {
          console.log('second');
       }
       if (a == 'e') {
          console.log('third');
       }

    }       
    setTimeout( bar(0), 1000 );
});

问题是setTimeout不起作用。单击后立即执行代码。

这很奇怪,因为如果我避免使用闭包,它就会起作用......

setTimeout(function bar(){
   var a = string[0];
   //...everything else
},1000 );

但这可能会使代码变得混乱/冗余,因为我打算这样做3次。理想情况下,工作代码将是......

setTimeout( bar(0), 1000 );
setTimeout( bar(1), 2000 );
setTimeout( bar(2), 3000 );

但同样,设置timeOut就像这样由于某种原因不起作用:/任何想法为什么?

1 个答案:

答案 0 :(得分:0)

setTimeout( bar(0), 1000 );

这里setTimeout需要一个函数,但它得到bar(0)。因此,在尝试初始化bar(0)时,必须使用

setTimeout( () => bar(0), 1000 ) 

使它工作,因为现在它返回一个函数