生活随笔
收集整理的這篇文章主要介紹了
《编写高质量代码改善JavaScript程序的188个建议》读书笔记
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
逗號(hào)運(yùn)算符比較怪異。如 ? ?var a =(1,2,3,4);alert(a);// 4 ? ? ?var a = 1,2,3,4;//報(bào)錯(cuò)注意a++和++a的差別,變量在參與運(yùn)算中不斷地變化。var a;?a = (a++) + (++a) - (a++) - (a++);在if語(yǔ)句中禁止使用function語(yǔ)句,雖然大多數(shù)的瀏覽器都允許在if語(yǔ)句中使用function,但它們?cè)诮馕鰂unction語(yǔ)句的處理各不相同,因此造成了可移植性方面的問(wèn)題。一個(gè)語(yǔ)句不能以一個(gè)函數(shù)表達(dá)式開(kāi)頭(?)。基于函數(shù)的迭代要比基于循環(huán)的迭代慢一些。因?yàn)槊總€(gè)數(shù)組項(xiàng)要關(guān)聯(lián)額外的函數(shù)調(diào)用時(shí)造成速度慢的主要原因。當(dāng)條件體增加時(shí),if性能負(fù)擔(dān)增加的程度比switch更大。在JavaScript提供的4中循環(huán)類型中,只有for in 循環(huán)執(zhí)行速度比其他循環(huán)明顯要慢,因?yàn)槌艘檎覍?duì)象上的屬性外,還要查找原型鏈上的屬性,增加性能開(kāi)銷。(in 運(yùn)算符的運(yùn)算機(jī)制?)回溯是影響正則整體性能的唯一因素。使用function語(yǔ)句和函數(shù)直接量定義的函數(shù)構(gòu)造總會(huì)被里提取出來(lái)優(yōu)先執(zhí)行。只有在函數(shù)被解析和執(zhí)行完畢之后,才會(huì)按順序執(zhí)行其他代碼行。但是使用new Function構(gòu)造函數(shù)定義的函數(shù)并非提前運(yùn)行,而是運(yùn)行時(shí)動(dòng)態(tài)地被執(zhí)行,這也是Function構(gòu)造函數(shù)定義的函數(shù)具有頂級(jí)作用域的根本原因。通過(guò)new運(yùn)算符可以復(fù)制函數(shù)的結(jié)構(gòu),從而實(shí)現(xiàn)函數(shù)實(shí)例化的目的。惰性載入函數(shù)主要解決的問(wèn)題也是兼容性,原理跟分支函數(shù)類似。函數(shù)綁定是為了改變函數(shù)執(zhí)行上下文,特別是當(dāng)函數(shù)中有this關(guān)鍵字時(shí)。高階函數(shù)至少滿足以下條件之一:□接收函數(shù)作為輸入;□輸出一個(gè)函數(shù)借助prototype屬性,可以訪問(wèn)原型對(duì)象內(nèi)部成員。當(dāng)構(gòu)造函數(shù)實(shí)例化后,所有實(shí)例對(duì)象都可以訪問(wèn)構(gòu)造函數(shù)的原型成員。本地屬性會(huì)覆蓋原型屬性,如果使用delete運(yùn)算符刪除本地屬性,那么原型屬性依然會(huì)顯示出來(lái)。使用原型的幾種用途:1)使用原型設(shè)置默認(rèn)值;2)使用原型實(shí)現(xiàn)數(shù)據(jù)備份;3)使用原型設(shè)置只讀屬性;4)使用原型進(jìn)行批量復(fù)制“||”運(yùn)算符為對(duì)象屬性設(shè)置默認(rèn)值,當(dāng)對(duì)象屬性值未定義時(shí),以默認(rèn)值進(jìn)行傳遞。使用hasOwnProperty方法。如果對(duì)象擁有獨(dú)有的屬性,那么調(diào)用該方法將返回true,也就是說(shuō)hasOwnProperty不會(huì)檢查原型鏈。構(gòu)造函數(shù)是一個(gè)特殊結(jié)構(gòu)的函數(shù),它沒(méi)有返回值,通過(guò)this關(guān)鍵字來(lái)初始化實(shí)例對(duì)象。JavaScript核心對(duì)象中的Math和Global都是靜態(tài)對(duì)象,不需要實(shí)例化就可以直接訪問(wèn)。類的靜態(tài)成員包括私有和公共兩種類型,不管是公共成員還是私有成員,它們?cè)谙到y(tǒng)中只有一份副本,不會(huì)被分成多份傳遞給不同的對(duì)象,而是通過(guò)函數(shù)指針進(jìn)行引用,這與閉包截然不同。如果構(gòu)造函數(shù)有返回值,并且返回值是引用類型,那么經(jīng)過(guò)new運(yùn)算符計(jì)算后,返回的不再是構(gòu)造偶函數(shù)自身對(duì)應(yīng)的實(shí)例對(duì)象,而是構(gòu)造函數(shù)包含的返回值(即引用類型值)。瀏覽器渲染操作的順序如下:1)解析HTML結(jié)構(gòu);2)加載外部腳本和樣式文件;3)解析并執(zhí)行腳本代碼;4)構(gòu)造HTML DOM模型;5)加載圖片等外部文件;6)頁(yè)面加載完畢createElement和innerHTML兩者性能基本相近,不過(guò)在幾乎所有的瀏覽器中innerHTML速度更快一些,但最新的基于WebKit的瀏覽器(Chrome和Safari)除外。警惕文檔遍歷中的空格bug。在遍歷DOM文檔元素時(shí),空格的存在很容易造成誤解,因?yàn)镈OM把空格也作為一個(gè)節(jié)點(diǎn)進(jìn)行解析(包括換行符)。在大多數(shù)瀏覽器上,克隆節(jié)點(diǎn)更有效率,但提高得不太多。用克隆節(jié)點(diǎn)的辦法創(chuàng)建1000行表格,只創(chuàng)建一次單元格,然后重復(fù)執(zhí)行復(fù)制操作,只有會(huì)更快一點(diǎn)。當(dāng)DOM改變影響到元素的幾何屬性(寬和高)時(shí),如改變邊框?qū)傩曰蛟诙温渲刑砑游淖謱l(fā)生一系列后續(xù)動(dòng)作:瀏覽器需要重新計(jì)算元素的幾何屬性,而且其他元素的幾何屬性和位置也會(huì)因此改變并受到影響。瀏覽器使渲染樹(shù)上受到影響的部分失效,然后重構(gòu)渲染樹(shù),這個(gè)過(guò)程稱作重排版(reflow)。對(duì)于瀏覽器窗口來(lái)說(shuō),通過(guò)獲取html標(biāo)簽的clientWidth和clientHeight屬性就可以得到瀏覽器窗口的可視寬度和高度,document.documentElement.clientWidth。但是ie一下版本的瀏覽器中,body是最頂層的可視元素,因此需要寫成document.body.clientWidth。在JavaScript中,不只是with表達(dá)式人為地改變運(yùn)行期上下文的作用域鏈,try catch表達(dá)式的catch子句也具有相同效果。DOM元素中有一些特殊的測(cè)量屬性的訪問(wèn)和方法的調(diào)用,也會(huì)觸發(fā)reflow,比較典型的就是offsetWidth和getComputedStyle。為了提高DOM訪問(wèn)效率,推薦使用XPath查找元素。很多瀏覽器已支持該功能。每個(gè)瀏覽器對(duì)長(zhǎng)時(shí)間運(yùn)行腳本檢查方法上略有不同:IE)500萬(wàn)條語(yǔ)句以內(nèi);FF)默認(rèn)限制為10s;Safari)默認(rèn)限制為5s,且不可改變但能關(guān)閉;Chrome)沒(méi)有長(zhǎng)時(shí)間運(yùn)行腳本限制,代之以依賴它的通用崩潰檢測(cè)系統(tǒng)來(lái)處理此類實(shí)例;Opera)沒(méi)有時(shí)間限制。
轉(zhuǎn)載于:https://www.cnblogs.com/shuiyi/p/5433272.html
總結(jié)
以上是生活随笔為你收集整理的《编写高质量代码改善JavaScript程序的188个建议》读书笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。