What’s your favorite interview question to ask a candidate?
For further actions, you may consider blocking this person and/or reporting abuse
What’s your favorite interview question to ask a candidate?
For further actions, you may consider blocking this person and/or reporting abuse
zhuyue -
Probir Sarkar -
Massimo Artizzu -
Luca Argentieri -
Top comments (41)
What will output these example? Why?
How to fix it to output numbers from 0 to 9?
Using let you will get output numbers from 0 to 9.
Feel free to run it and prove me wrong, but I believe that it prints 10 ten times, at 1 second intervals.
It's due to binding on the variable I, not the value of I when you create the lambda.
You need to introduce a local variable in the loop body to fix it.
You are wrong, if you use
for(let i
instead offor(var i
it will print 0 to 9 correctly. jsfiddle.net/uh86qx1v/1/Can you explain why that happens? I'm new to ES6 and learned that
let
has block scope. When used in the for loop, in conjunction with setTimeOut set to 1000, you would think the console.log would run every 1000 ms for each console.log. But this doesn't happen. When I tried it, the sequence of console.logs appear all at once after 1000 ms. Why does that happen? Is it because setTimeOut, when called 10 times, gets pushed to the stack, then after 1000 ms the stack does its thing and all 10 calls are executed simultaneously?If you take out the setTimeOut and just do console.log within the
for (var i
loop you get the correct result as well.Yup, you're correct. The callbacks are registered very close to each other - they're all queued up to run at basically the same time.
Akash - this is the local variable I was trying to describe: jsfiddle.net/e7gyc5ts/1/ (I needed an IIFE to solve a problem that is better solved by
let
)github.com/ufocoder/javascript.int...
@hiattzhao youtu.be/Nzokr6Boeaw
for(let i=0; i<10; i++) {
setTimeout(()=>console.log(i),i*500);
};
for(var i=0; i<10;i++) {
setTimeout(console.log.bind(null,i), i*100);
};
for(var i=0; i<10; i++) {
(function(x){
setTimeout(()=> console.log(x), x*100)
})(i);
};
On the
bind
example, heads up that in some older browsers you need to passconsole
as the first argument to anyconsole.<method>.bind()
. Not that this is a particularly real-world thing to do, but it's bitten me a few times when trying to debug a promise chain in an older browser; I always love to dopromise.then(console.log)
, but in old browsers this breaks until you dopromise.then(console.log.bind(console))
.It is an excellent question to test how much you understand JS.
Fun trivia:
setTimeout
can have more than two arguments. After the callback function, and the duration, you can pass args for the callback, as well. Instead of working aroundsetTimeout
, usesetTimeout
.(Although I don't even write the
for
loop, like, ever. It's allmap
,filter
,reduce
etc. So I'd rewrite it into something like this:for (var i=0; i<10; i++) {
setTimeout(function() { console.log(i++ - 10); }, 1000);
}
In for loop replace var with let.As let has block scope .It creates new scope of i for each iteration and each setTimeout callback will have its own i value.
Code -->
Method 1 ->By using let
Method 2->By using IIFE function
Method 3 ->
Why is this your favourite question?
Because answer on this question will discover what answerer know about:
for (var i = 0; i < 10; i++) {
setTimeout(
(function (i) {
console.log(i)
})(i),
1000
)
}
for (var i = 0; i < 10; i++) {
setTimeout(
(function (i) {
console.log(i)
})(i),
1000
)
}
For candidates with a clear focus on a specific technology/library/framework/… I always ask "In which case would you not use that?".
Or a similar version of that question.
Like "For which kind of project would Angular be a bad architectural choice?".
Because one size never fits all and it's always a good discussion-starter.
I don't ask weird syntax-questions. It's just rude. It doesn't tell me anything at all about the person. It's exploiting their nervousness for no gain. I want to know if they will make the right calls, and produce working, readable and tested solutions. You know, the stuff that is not one google-search away.
Solid approach.
Remember, interviewing is a two-way street. It's just as much about you assessing a prospective employer/boss as it is them assessing you.
If an interviewer tries to "catch you out" with some arbitrary, illegible code or tries to belittle you because you don't know answers to some esoteric problem then it says more about them and their approaches to work than it does about your knowledge/abilities.
Most def, it's more a conversation-starter, without a "right" answer. If they can argue their claim, perfect.
I think I could argue why React should always be used, sometimes be used, and never be used :-)
Absolutely. Evidence about ways of thinking/approaching a problem are much more revealing about a candidate than their ability to interpret obtuse code like a compiler.
What will be output of
Try in chrome, you will not see "done"
Great question! I believe this is because arrow functions can't be bound and also don't have
arguments
, for that we need to use regularfunction
definitions:You can't bind anything to an arrow functions
this
. But you can bind arguments to them. ie:would work.
Oh nice! Thanks for explaining that.
I always like to ask which project the candidate is most proud of, like what's their "darling" and why is that so. This always opens room to see what they care for, how can they articulate that and opens room for more questions.
Yay, that's also my favourite interview question... and I hope to be asked that question, too, when I'm the candidate.
I'd ask what the candidate used for build tooling in personal projects and any previous team projects. I think the answer to this question would tell me a lot about how they approached their work and would lead to an insightful conversation.
I'm new to JS, and I'm pretty clear on why this logs 10 to the console, but I'm not understanding why it logs it 10 times. Can someone please explain this to a noob?
PS - apologies for reactivating an older thread, but this code actually came up in another context, and when I searched I found this discussion. Thanks for understanding.
setTimeout(()=>console.log("Hello4"),1004)
setTimeout(()=>console.log("Hello3"),1003)
setTimeout(()=>console.log("Hello2"),1002)
setTimeout(()=>console.log("Hello1"),1001)
setTimeout(()=>console.log("Hello0"),1000)
or
for(let i=0;i<5;i++){
setTimeout(()=>console.log("Hello" +i),1000*1)
}
Both code will produce same result!
Any that I know and get right. 😅
What's your favorite addition to ECMAscript?
I know this might sound a bit ridiculous, but...
'When was the first time you touched a computer?'
'And when was the first time a computer touched you?'
No pun intended! :)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.