怎么样才算是精通 JavaScript?
共 608字,需浏览 2分钟
·
2022-02-09 09:04
假若你能写出一个完全符合 ES5 spec 的 Function.prototype.bind 的话,你就可以说是精通了。
首先我必须做一个假设,那就是我们说的是 JavaScript 这门语言本身,而不考虑任何和浏览器相关的事情。那也就是说,只要能在 Node.js 中跑起来就行,没有任何的 DOM 或 BOM API,也没有 JavaScript 版本兼容性问题。(基于这个假设,很多答案列举的是「什么不是 JavaScript」。)
为什么选择 Function.prototype.bind?因为假若你能完全了解它的每一个细节,你就了解 JavaScript Function 的一切了。Function 的本质是什么,什么是 closure,如何用 Function.prototype.apply 改变 this,为什么要改变 prototype 引用。如果这些问题有一个你搞不明白,你都写不出 Function.prototype.bind。此外,如果你真的认真读 ES5 了,你就知道要完全符合 spec 是不可能的(反回结果要求无 prototype 但使用时相当于拥有原 prototype),只能保证兼容同时放弃一些细节。
如果你能如此了解 Function,我觉得 setTimeout 之类的也十分了解吧,所以我通常用 Function.prototype.bind 来做 benchmark。
浏览
7首先我必须做一个假设,那就是我们说的是 JavaScript 这门语言本身,而不考虑任何和浏览器相关的事情。那也就是说,只要能在 Node.js 中跑起来就行,没有任何的 DOM 或 BOM API,也没有 JavaScript 版本兼容性问题。(基于这个假设,很多答案列举的是「什么不是 JavaScript」。)
为什么选择 Function.prototype.bind?因为假若你能完全了解它的每一个细节,你就了解 JavaScript Function 的一切了。Function 的本质是什么,什么是 closure,如何用 Function.prototype.apply 改变 this,为什么要改变 prototype 引用。如果这些问题有一个你搞不明白,你都写不出 Function.prototype.bind。此外,如果你真的认真读 ES5 了,你就知道要完全符合 spec 是不可能的(反回结果要求无 prototype 但使用时相当于拥有原 prototype),只能保证兼容同时放弃一些细节。
如果你能如此了解 Function,我觉得 setTimeout 之类的也十分了解吧,所以我通常用 Function.prototype.bind 来做 benchmark。
评论