我有类似下面的代码。
function test(){
return function(){
setInterval(//Another Function Reference // ,1000);
}
}
我正在调用test()();
我看到上面的代码无效。有人可以解释一下为什么?
答案 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)
它对我有用...你正在返回一个函数,所以你需要调用它:
function test(){
return function(){
setInterval(function(){
alert("Hello");
},1000);
}
}
test()();
我假设您希望test()
成为一个自调用函数,因此返回函数设置一次,而不是:
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)
}