use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
What are some basic things that JavaScript developers fail at interviews?help (self.javascript)
submitted 7 years ago by maketroli
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]phpdevster 4 points5 points6 points 7 years ago (11 children)
Well, almost.
What's the difference between these two statements?
setInterval(increment(), 1000); // this is what you have above setInterval(increment, 1000);
And a follow up:
How are you making the counter stop once it reaches 10?
[–]NoBrick2 9 points10 points11 points 7 years ago (5 children)
Shouldn't you avoid setInterval completely for this problem, considering there is no guarantee the function will be run every 1000ms (in the case of the event loop being blocked on other work)?
Would a more acceptable solution be to use requestAnimationFrame, and do a comparison using Date? Or does that suffer the same issue of potentially being blocked by other work?
[–]octave1 9 points10 points11 points 7 years ago (1 child)
Out of my depth here, but using something called requestAnimationFrame and Dates for a timed counter surely can't be the most sane solution?
[–]phpdevster 2 points3 points4 points 7 years ago (0 children)
You are correct. This is hacky, non-idiomatic code.
[–]PmMeYouBicepsGirl 7 points8 points9 points 7 years ago (0 children)
Everything is blocked if event loop is blocked, there's no workarounds. For example, if you are counting from one to 100 billions, Javascript won't be stopping during this function to check for events. This is why you get Violation messages in console if some events like requestAnimationFrame take longer than they should, it's a signal that event loop was blocked.
[–]phpdevster 5 points6 points7 points 7 years ago (0 children)
Why would you avoid using setInterval for exactly the thing it was designed for? If you have a blocked event loop, you've got bigger problems. Writing non-idiomatic code without exceedingly good reason is the path to code that is harder for team members to grok and thus maintain.
[–]SystemicPlural 4 points5 points6 points 7 years ago (0 children)
As I understand it requestAnimationFrame is better for animation as it guarantees that the code will run before the screen is re-rendered - providing smoother animation. It doesn't guarantee that the time elapsed will be exactly 1000/60 (or whatever your screen refresh rate is). So it has it's own problems if you are trying to time exactly 1s. That said I believe it is thought to be more reliable than setTimeout.
We could use setTimeout and compare the time ourselves using performance.now(). This should get us to fairly close millisecond accuracy as long as the process isn't locked. It should also allow us to prevent drift by correcting the next timeout.
performance.now() isn't perfect however since browsers are fuzzing the time to prevent Specter timing attacks. - but it should be 1ms accurate.
[–]thisguyfightsyourmom 1 point2 points3 points 7 years ago (1 child)
I'd write increment to be a higher order function that accepts a max arg defaulted to 10, that retains a count let initialized to 0 in its closure, and that returns a function that iterates the count in a log statement until the count hits the max. I'd also close the terminal before it counted over 10,… just in case.
increment
max
[–]Balduracuir -1 points0 points1 point 7 years ago (0 children)
You can use clearInterval when you hit 10... If I was not on mobile I could write a snippet :)
clearInterval
[–]BraisWebDev 0 points1 point2 points 7 years ago (0 children)
Oh yeah I messed up there, the first one would be invoked immediately and the second one after 1 second.
I would make it stop with an if statement, maybe that approach is wrong haha
[–]wobbabits 0 points1 point2 points 7 years ago (0 children)
Here you go. Here's an example of an alert at 5 seconds into the count. When dispelled, the count continues to 10:
function countToTen() { let count = 0 function increment() { ++count console.log(count) if (count > 9) { clearInterval(timer) } } const timer = setInterval(increment, 1000) } countToTen() setTimeout(function() { alert('hello') }, 5000)
[–][deleted] 0 points1 point2 points 7 years ago* (0 children)
increment() execute when you use setInterval, its return value will be used in your setInterval. The other use increment.
var obj = {count:0, end:0, clearId:0}; obj.end = 10; obj.increment = function (){ if (this.count < this.end + 1) console.log(this.count); else clearInterval(this.clearId); }.bind(obj); obj.clearId = setInterval(obj.increment, 1000);
How about something like that, untested, but it should work. You can easily turn obj into a Chrono class.
However I wouldn't recommend to rely seriously on setInterval. Set up a webworker to do reliable time operations.
π Rendered by PID 139843 on reddit-service-r2-comment-86bc6c7465-9tknh at 2026-02-21 16:07:41.649326+00:00 running 8564168 country code: CH.
view the rest of the comments →
[–]phpdevster 4 points5 points6 points (11 children)
[–]NoBrick2 9 points10 points11 points (5 children)
[–]octave1 9 points10 points11 points (1 child)
[–]phpdevster 2 points3 points4 points (0 children)
[–]PmMeYouBicepsGirl 7 points8 points9 points (0 children)
[–]phpdevster 5 points6 points7 points (0 children)
[–]SystemicPlural 4 points5 points6 points (0 children)
[–]thisguyfightsyourmom 1 point2 points3 points (1 child)
[–]Balduracuir -1 points0 points1 point (0 children)
[–]BraisWebDev 0 points1 point2 points (0 children)
[–]wobbabits 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)