只有真正的javascript程序員才知道javascript太難了。其他程序員都覺得javascript是門玩具語言。
難點
- 隱式轉換
javascript的真值表,可以體驗一下。
- this指向問題
javascript中的this不是靜態綁定的,而是動態綁定的。而且可以人為改變指向。
看看下面這個例子
控制檯將輸出什麼?
- 閉包
javascript中的作用域是可以通過向上查找的,通過閉包可以讓函數引用底層的作用域變量,可以在高層訪問底層的作用域。好象沒什麼難得。
看看例子
這個例子輸出什麼?
- 作用域鏈
作用域鏈沒什麼好說的,直接上代碼
為什麼輸出的undefined,不懂的自己去找原因。
- 原型鏈
javascript使用一種非主流的對象機制,基於原型鏈的對象繼承機制。這需要我們拋棄很多語言的Class的思想。認真研究下這個原型鏈。
理解在對象構造器中this.getName,A.prototype.getName,和A.getName的區別。
- EventLoop
javascript中代碼不像很多其他語言一樣,代碼是順序執行的。不管是瀏覽器中還是Nodejs中都存在一個EventLoop。讓代碼編碼變得不可控。Nodejs中難度更是成倍增加。
例子:
思考一下,運行結果是什麼?
總結
javascript的難點還沒有全部一一列出。javascript是一門支持多範式的編程語言,說白了就是大多javascript都沒有統一規範,加上javascript高度靈活性,各種奇淫巧技,導致很多代碼難以閱讀。很多難點都是javascript本身自身缺陷造成的。很多最佳實踐其實就是ES6,ES8,ES9...。
閱讀更多 廖亮 的文章
關鍵字: 程序員 瀏覽器 JavaScript