Okay, you might say “of course not!”, well I just didn’t know T_T

The definition of Array.prototype.map() is, according to Mozilla:

var new_array = arr.map(callback[, thisArg])


Where callback is: callback(currentValue, index, array)

Yes! despite the fact that we usually use [1,2,3].map((x) => ...), utterly careless about the 2nd and 3rd arguments. It’s still there, javascript just automagically ignores them.

Note: those who’re so familiar with Python might, like I do, feel the map callback function should have only one argument.

Now, when we combine it with javascript’s spread syntax hell begins:

function p(...words) {
return <p>\${words.join(' ')}</p>
}

const words = [
'Hello', 'world!', 'it', 'works!'
]
words.map(p)


Here is the results:

[ '<p>Hello 0 Hello,world!,it,works!</p>',
'<p>world! 1 Hello,world!,it,works!</p>',
'<p>it 2 Hello,world!,it,works!</p>',
'<p>works! 3 Hello,world!,it,works!</p>' ]


It just doesn’t work as you might expect as I didn’t expect this!