为什么下面的JavaScript函数不打印任何内容
Why does the following JavaScript function not print anything?
我从"Hands-on Node"中获得了以下示例。它使用了一些相当先进的技术。我已经逐字逐句地复制了代码,并尝试调试了几次,但不明白为什么没有任何东西打印到我的控制台上。
var schedule = function(timeout, callbackfunction) {
return {
start: function() {
setTimeout(callbackfunction, setTimeout)
}
}
};
(function() {
var timeout = 1000;
var count = 0;
schedule(timeout, function doStuff() {
console.log(++ count);
schedule(timeout, doStuff);
}).start(timeout);
})();
除了传递setTimeout
而不是timeout
(这仍然允许它运行一次)之外,如果这是为了循环计时器,那么就存在缺陷。
该代码在第一次之后再也不会调用.start()
。你需要这样做。。。
(function() {
var timeout = 1000;
var count = 0;
schedule(timeout, function doStuff() {
console.log(++ count);
schedule(timeout, doStuff).start(); // Invoke .start() each time
}).start(); // Removed useless "timeout" argument
})();
我不知道为什么有人会采取这种方法,因为它看起来过于复杂。
我甚至不知道他们为什么要把timeout
传给最初的.start()
。该函数不使用传递的任何参数。我更新以删除它。
如果这是为了教授闭包的好处,那么这个例子真的没有什么作用。
是的,.start()
函数确实引用了timeout
和callbackfunction
参数,但返回的对象被使用一次并丢弃,此时我们再次调用schedule
,并向其传递相同的参数。
如果schedule
只是返回了一个函数,并且您保留了对该函数的引用,那么作为演示似乎更有用。然后,它只需要对schedule
的一次调用就可以保存这些值。
var schedule = function(timeout, callbackfunction) {
return function() {
setTimeout(callbackfunction, timeout)
}
};
(function() {
var count = 0;
var fn;
(fn = schedule(1000, function doStuff() { // 1. assign the function returned
console.log(++ count);
fn(); // 3. invoke the same function again
}))(); // 2. invoke the returned function immediately
})();
"schedule"函数返回的匿名函数中的"start"函数有一个拼写错误-它应该调用参数为"timeout"的"setTimeout",而不是"setTimeout":
var schedule = function(timeout, callbackfunction) {
return {
start: function() {
setTimeout(callbackfunction, timeout); // Fix the second arg.
}
}
};
此外,"doStart()"函数调用再也不会调用匿名的"start()"功能,因此log语句只执行一次。
相关文章:
- 是否有任何内置方法可以更改JavaScript对象'的属性设置为某个值
- 如果我只想从数组中打印任何一个元素.任何数组.那么代码会是什么
- 使用 CasperJS 时,是否可以在执行任何内联或外部 Javascript 之前与加载页面的 DOM 进行交互
- 嵌套在嵌入式红宝石上,不打印任何内容
- 在Javascript的警告框中打印任何数字的乘法表
- document.write 不会在页面上打印任何内容
- 找不到“”;应用程序“;模板或视图.对象{fullName:“template:application”}将不呈现任何内
- 打印任何java应用程序的函数/方法调用序列
- 为什么下面的JavaScript函数不打印任何内容
- 如何在没有任何内置函数的情况下将元素添加到数组中
- 我的功能不是打印任何东西
- 如何获得元素id点击没有任何内联函数调用在javascript
- 在javascript/jquery中是否有任何内置功能来过滤邮件,如php's函数(!使用filter_var
- 在JavaScript中过滤数组,而不使用任何内置函数或新数组
- JQuery函数不打印任何东西
- 为什么IE9没有打印任何东西?
- Jquery是否有任何内置方法来单独查找可验证的元素?
- 我试图在不使用任何内置方法的情况下延迟此函数.为什么这行不通呢?
- 如何在不使用javascript中任何内置函数的情况下反转字符串
- QUnit没有't打印任何结果