返回函数内的setInterval不起作用

时间:2015-01-07 12:02:59

标签: javascript

我有类似下面的代码。

function test(){
   return function(){
      setInterval(//Another Function Reference // ,1000);
   }
}

我正在调用test()();

我看到上面的代码无效。有人可以解释一下为什么?

5 个答案:

答案 0 :(得分:2)

您的代码 1 中没有关闭。 test返回一个函数对象,但不执行[function]。在代码片段中,内部函数使用了3个闭包,返回的函数对象被赋值给变量,并且执行了该闭包。返回函数对象的优点是可以将其分配给不同的值并单独执行。

1 问题的早期版本提到“关闭无效

// startInterval: interval 1 second, message: 'Hello' (default)
var startInterval = test(null, 1000);
// anotherInterval: interval 5 seconds, message: ''Hello to you too''
var anotherInterval = test('<i>Hello to you too</i>', 5000);

// execute the function objects
startInterval();            
anotherInterval();

// [hithere], [time] and [result] are closed over
function test(hithere, time){
   hithere = hithere || 'Hello';
   time = time || 1000;
   var result = document.querySelector('#result');
   return function(){
      setInterval(function(){
         result.innerHTML += hithere+'<br>';
      },time || 1000);
   }
}
<div id="result">Greetings!<hr></div>

答案 1 :(得分:0)

它对我有用...你正在返回一个函数,所以你需要调用它:

http://jsfiddle.net/97hzj2je/

function test(){
   return function(){
      setInterval(function(){
         alert("Hello");
      },1000);
   }
}

test()();

我假设您希望test()成为一个自调用函数,因此返回函数设置一次,而不是:

http://jsfiddle.net/LL24g8z2/

var test = (function(){
   return function(){
      setInterval(function(){
         alert("Hello");
      },1000);
   }
})();

test();

答案 2 :(得分:0)

function test(){
   return function(){
      setInterval(function(){
         alert("Hello");
      },1000);
   }
}

var hello = test();
hello();

答案 3 :(得分:0)

似乎工作正常。请记住,如果您致电test(),您只需恢复该功能,但您无法运行它。要运行它,您需要调用结果函数。您可以通过以下任一方式执行此操作:

test()();

或者:

var myFunction = test();
myFunction();

答案 4 :(得分:0)

bind你的内部函数到上下文,问题是当最终执行set interval时,它在全局范围内而不是你从中调用它的那个。可以像这样修复:

function test(){
   return function(){
      setInterval(/*Another Function Reference */ ,1000);
   }.bind(this)
}