Once again I am going to shamelessly plug my favorite course author Anthony Alicea and his JS/NodeJS/Angular1 course[1],[2],[3]. I really really liked Tony's course as it gave quite a deep look into topics, which are usually only attainable from books, while at the same time keeping it very interesting and also contain lots of best practice material and being extremely dense but easy to digest. Do let me know if you guys know any other courses of the same style. For quite a while I have been trying to find similar courses/tutorials of similar caliber when it comes to knowledge gained and being easy to digest. If you haven't watched any of Tony's courses, do give them a shot. Rigorous -- but not boring or too long.<p>[1]<a href="https://www.youtube.com/watch?v=Bv_5Zv5c-Ts" rel="nofollow">https://www.youtube.com/watch?v=Bv_5Zv5c-Ts</a><p>[2]<a href="https://www.youtube.com/watch?v=ejBkOjEG6F0" rel="nofollow">https://www.youtube.com/watch?v=ejBkOjEG6F0</a><p>[3]<a href="https://www.udemy.com/understand-nodejs/?couponCode=LEARNNOD.." rel="nofollow">https://www.udemy.com/understand-nodejs/?couponCode=LEARNNOD...</a>.<p>Disclaimer: Because it may sound like it, I'd like to clarify I have absolutely no affiliation with Tony or his courses. I just really really liked them.
When I started out, this and "Secrets of the JavaScript Ninja" didn't help me understand. For me, after months of trying to understand JavaScript, Dmitry Soshnikov's post, JavaScript. The Core, made understanding closure, prototype, and scope chain crystal clear in about 30 minutes. [0] Also, every time someone shares a basics on JavaScript link on Hacker News I also share my interview guide which despite its popularity has yet to land me a job writing JavaScript. Nonetheless, I love writing JavaScript and understanding it and some of the APIs like Angular, Lodash, Nightmare, and async makes me feel empowered. It doesn't cover any topics in ES6 yet.[1]<p>[0] <a href="http://dmitrysoshnikov.com/ecmascript/javascript-the-core/" rel="nofollow">http://dmitrysoshnikov.com/ecmascript/javascript-the-core/</a><p>[1] <a href="https://github.com/adam-s/js-interview-review" rel="nofollow">https://github.com/adam-s/js-interview-review</a>
This is fairly old. It goes with John Resig's book "Secrets of the JavaScript Ninja Released" which was released at the beginning of 2013 [1]. I remember seeing this site up well before that. He started the book in 2008.<p>If you can work your way through this tutorial you'll gain a decent grasp of ES5 prototypes and functions.<p>[1]: <a href="http://ejohn.org/blog/secrets-of-the-javascript-ninja-released/" rel="nofollow">http://ejohn.org/blog/secrets-of-the-javascript-ninja-releas...</a>
Since we are talking about learning Javascript, there is a very interesting approach in this edX course: Teach biology and Javascript!<p>"Nature, in Code: Biology in JavaScript" -- Learn JavaScript programming by implementing key biology concepts in code, including natural selection, genetics and epidemics.<p><pre><code> Instead of just learning programming principles outside of
any context, you will learn JavaScript programming by
implementing key biological concepts in code so they can
run in your browser.
</code></pre>
<a href="https://www.edx.org/course/nature-code-biology-javascript-epflx-nic1-0x" rel="nofollow">https://www.edx.org/course/nature-code-biology-javascript-ep...</a>
Haven't gone past the first slide yet, but FWIW with ES6 you could do something like:<p><pre><code> [nikki ~]$ node
> const bind = (fn, obj, ...args1) => (...args2) => fn.call(obj, ...args1, ...args2)
undefined
> bind(console.log, console, 'a', 'b')('c', 'd')
a b c d
undefined
> // calls `fn` with `obj` as `this` and the remaining arguments prepended with given ones
</code></pre>
I believe all of the old-style argument stuff with `arguments` is possible with `...`, not sure though, maybe some edge cases.
> #2: Goal: To be able to understand this function:
>
> // The .bind method from Prototype.js
> Function.prototype.bind = function(){
> var fn = this, args = > Array.prototype.slice.call(arguments), object = args.shift();
> return function(){
> return fn.apply(object,
> args.concat(Array.prototype.slice.call(arguments)));
> };
> }<p>I do not want to understand this absurdness. I want a comment that tells me what it does so I can rewrite it in a sane way.
JS Design Patterns is also good <a href="https://addyosmani.com/resources/essentialjsdesignpatterns/book/" rel="nofollow">https://addyosmani.com/resources/essentialjsdesignpatterns/b...</a>