直接來主題,給大家分享一些Javascript一些屬性以及方法的使用小技巧捡多。
回調(diào)
函數(shù)可以讓不連續(xù)時間的處理變得更容易蓖康。例如:假定有這么一個序列,由用戶交互開始垒手,向服務(wù)器發(fā)送請求蒜焊,最終現(xiàn)實服務(wù)器的響應(yīng)。最簡單的寫法可能是這樣的:
1
這種方式的問題在于網(wǎng)絡(luò)上的同步請求將會導(dǎo)致客戶端進入假死狀態(tài)科贬。如果網(wǎng)絡(luò)傳輸或者服務(wù)器很慢泳梆,響應(yīng)性的降低是不可接受的。
更好的方式就是發(fā)起異步請求榜掌,提供一個當(dāng)服務(wù)器的相應(yīng)到達時將被調(diào)用的回調(diào)函數(shù)优妙。異步的函數(shù)立即返回,這樣客戶端就不會被阻塞憎账。
2
我們傳遞了一個函數(shù)作為參數(shù)給 send_request_asynchronously 函數(shù)套硼,它將在收到響應(yīng)時被調(diào)用。
模塊
我們可以使用函數(shù)和閉包來構(gòu)造模塊胞皱。模塊是一個提供接口卻隱藏狀態(tài)與現(xiàn)實的函數(shù)或?qū)ο笮耙狻Mㄟ^使用函數(shù)去生產(chǎn)模塊九妈,我們機會可以完全摒棄全局變量的使用,從而緩解這個JavaScript的最為糟糕的特性之一所帶來的影響雾鬼。
打個比方萌朱,假設(shè)我們要給 String 增加一個 deentityify 方法。它的認(rèn)識是尋找字符串中的HTML 自附體并替換為它們對應(yīng)的字符呆贿。在一個對象中保存字符實體的名字和它們中嚷兔,但是全局變量是魔鬼。我們可以把它定義在函數(shù)本身做入,但是那有運行時的損耗冒晰,因為該函數(shù)在每次被執(zhí)行的時候該字面量都會被求值一次。理想的方式是將它放入一個閉包竟块,而且也許還能提供一個增加更多字符實體的拓展方法:
3
這都是術(shù)語JavaScript的干貨壶运,如果有在學(xué)習(xí)前端或者想學(xué)習(xí)前端的朋友,可以一起來我們的前端群621071874浪秘,大家一起學(xué)習(xí)進步蒋情,解決問題,當(dāng)然群里還有各種經(jīng)典案例以及面試小技巧供大參考耸携。
套用
函數(shù)也是值棵癣,從而我們可以用有趣的方式去操作函數(shù)值。套用允許我們將函數(shù)與傳遞給它的參數(shù)相結(jié)合去產(chǎn)生出的一個新的函數(shù)夺衍。
4
add1是把函數(shù)傳遞給add函數(shù)的curry方法后創(chuàng)建的一個函數(shù)狈谊。add1函數(shù)把傳遞給它的參數(shù)的值+1.JavaScript并沒有 curry 方法,但是我們可以通過給 Function.prototype 添加功能開來實現(xiàn)沟沙。
5
curry 方法通過創(chuàng)建一個保留著原始函數(shù)和被套用的參數(shù)的閉包來工作河劝。它返回另外一個函數(shù),該函數(shù)被調(diào)用時矛紫,會返回調(diào)原始函數(shù)的結(jié)果赎瞎,并傳遞調(diào)用 curry 時的參數(shù)加上當(dāng)前調(diào)用的參數(shù)的所有參數(shù)。使它用 Array 和 concat 方法去連接兩個參數(shù)數(shù)組颊咬。
不好的是务甥, arguments 數(shù)組并不是一個真正的數(shù)組,所以它并沒有 concat 方法喳篇。要避開這個問題缓呛,我們必須在兩個 arguments 數(shù)組上都應(yīng)用數(shù)組的 slice 方法。這樣產(chǎn)生出擁有 concat 方法的常規(guī)數(shù)組杭隙。
6
這僅僅只是部分小技巧,如有想獲取更多的小技巧還請關(guān)注我的前端小群哦R蛎睢L翟鳌票髓!
到這,其實我也想把我珍藏許久的與大家分享一下铣耘,畢竟程序員也是男人洽沟,沒什么好解釋的。