首先不可否认的一点,是个浏览器都支持js
其次,js是门fp和oop混杂的语言,且偏命令式,所以大部分写代码的都能轻松转过去,且能享受fp的好处(虽然js支持完整的模式匹配估计是不可能的了)
最后,js很灵活,也很容易写(虽然这也导致了部分js代码垃圾的一批)。在不需要多线程的环境下,js是最好的选择(毕竟nodejs也这么多年了,该有的生态也都有了)
这三点导致了有人去用,然后生态就完善了,最后就陷入了良性循环。
Ruby这门语言怎么样?js的语法ruby都有,而且能做的更好(虽然目前还是伪多线程),尤其是方便的block,从观感上就比function当参数好。奈何除了Ruby on Rails,可能真的没什么人用Ruby了。而且不得不说,async和await比Thread.new和Thread.join要直观很多(毕竟async和await本来就是把异步搞成同步来写)
Erlang这门语言怎么样?纯粹的fp带来了诡异的简洁,况且模式匹配和高并发js哪个能做到?它的后代Elixir甚至加入了管道(虽然我也不知道为什么erlang没有)和宏,使代码更加清晰易懂且可以做到更加诡异的简洁。奈何大部分人都是从命令式学过来的,除非一开始就学习fp,不然没几个人受得了。
所以即使javascript的缺点一大堆,奈何它容易啊,浏览器原生支持啊。“Worse is Better”可不是一句空话。