3 ms·
Can anyone explain to me why I couldn't write n.forEach(console.log); Just tested on Chrome, it gives me an error TypeError: Illegal invocation
by chingjun 12y ago
Can anyone explain to me why I couldn't write
n.forEach(console.log);
Just tested on Chrome, it gives me an error
TypeError: Illegal invocation
- nilved 12y agoWhen you use `console.log` that way it gets `this` set to `null`. When you call `console.log("hello")`, `this` is set to `console`. Your code would work if you set an explicit `this`. n.forEach(console.log.bind(console)); I don't think there's any reason for this library to exist after you understand `this` semantics but I may be missing something. e: was, in fact, missing something. Apologies for the disparaging comment, see replies.
- bevacqua 12y agoThat's one, the other is that many of those functional methods tend to mess with functions that take more than one argument when you want to use the first one, e.g parseInt.
- dyscrete 12y agoWell it's not just about `this` but the arguments to pass to console rather. In this case: n.forEach(console.log.bind(console)); forEach is passing console all of its callback arguments, resulting in logging of keys, values, and array. EDIT: Forgot array
- nilved 12y agoAh, I understand. It reminds me of how the `cut` function could be used in Scheme.
- willyg302 12y agoAdditionally, this will log all the passed arguments (value, index, and array being traversed), which typically isn't what you want: [1, 2, 3].forEach(console.log.bind(console)); > 1 0 [1, 2, 3] > 2 1 [1, 2, 3] > 3 2 [1, 2, 3]
- aaronem 12y agoConvenience, I suppose; I had a few headaches when I first transitioned to Javascript and discovered the odd signatures its collection functions' callbacks are expected to have.
- vain 12y agon.forEach(console.log); Works on firefox. Chrome treats console.log differently from other functions for reasons unknown. but really, this library has no reason to exist