联众德州扑克登陆:如何寫出優美的 javascript 代碼

來源:互聯網 編輯: 張倩 手機版

德州扑克谁发明的 www.mvlaf.icu

如何寫出優美的 JavaScript 代碼?

【長天之云的回答(72票)】:

我覺得寫好代碼和作文章差不多,無外乎:工整、優雅、拒絕重復、惜字如金。

幾個小建議:

態度

對代碼有感情,每一行都應該盡心盡力,并且還要有把所有代碼扔垃圾簍之后再重寫兩遍的沖動——一旦有了這種沖動之后,什么都擋不住你,連吃喝拉撒時,問題都會浮現到你腦子里,你就會不由自主地解決它們……

能對自己的代碼提出懷疑本身就是一件了不起的事!加油!

少寫代碼

提前設計能有助于少寫代碼,增強全局感。

而代碼寫得少還能防止失控——感覺不對時就應該停下來,騰出時間來思考,為什么會偏離最先的想法。

所有符號各就各位

第一眼的就是空格太少,我推薦三個工具://jsbeautifier.org 可以給你的代碼格式化,記得用 diff 工具對照一下,格式化前后的區別;

SublimeLinter 可以動態地在編寫時給出 JSHint 提示(出錯行高亮);

Grunt 可以在文件變更時給出 JSHint 檢驗(聲音以及桌面通知);一旦把 lint 校驗做為提交代碼的必要過程,排版就會有本質的提高。

遵行慣用法注釋符號 `//` 后應該空一格;

防止變量提升,應先聲明后使用(JSHint 會提醒出 `_height` 存在變量提升以及定義后未使用的錯誤);

不應該使用硬編碼,并且重復幾次( ID 后綴名可以定義到常量里,用大寫字母);

不應該有兩個配置屬性,含義不明(this.opts 和 this._options);

若兩次以上引用同一對象的屬性,應該定義到局部變量再引用(var options = this._options);

不應該同時使用兩種屬性命名風格(colModel 和 table_body);

局部變量名應該盡可能短,而方法名應該盡可能完整(不應該同時即有 fromatTpl 又有 parseTemplate);

局部變量名不需要用下劃線開頭,僅對象私有屬性和私有方法有此必要;

變量名不需要帶類型屬性(_thdoms 叫 ths 就好);

使用 JavaScript 時,for 循環基本可以避免(比如 jQuery 有 $.each, $.map,$.filter, $.grep 等等高階函數可用);

jQuery 對象名習慣以 $ 開頭,以便區分 DOM 對象;

jQuery 查詢應盡量使用 context (如 this.$table = $('table', this.$element) );

jQuery DOM 操作和原生 DOM 操作不應該混用(已經使用 jQuery 的情況,就應該堅持使用 jQuery 來操作 DOM,避免丑陋的原生操作);

DOM 元素構造出來,也不應該再到文檔中查詢一遍了(圖上的構造太復雜,一眼真看不懂);

Code Review

把程序寫正確還只是跨出了第一步。把代碼交給你的同事和朋友 review,這是學習經驗、共同提高 最快的辦法。

【haochong的回答(23票)】:

去github研究那些大牛的代碼是怎么寫的人生苦短, 試試coffee

【Dion的回答(9票)】:

代碼風格及排版

雖然任何一種語言沒有規定的風格約定,但也總有一些不成文且喜聞樂見的習俗。

以你的代碼為例,給一下幾個風格上的建議:每個 function 之間多一空行,是的,除去注釋外再多一空行;適當加空格,比如 if 和后面的括號之間的空格、小括號和花括號之間的空格、冒號和 function 之間的空格等等;風格上保持一致,你的代碼里面有的地方 + 號和運算數之間有空格,有的則沒有;少用下劃線開頭的變量命名;

一段代碼里,var 語句可以合并在一起;暫時不會再修改的 function 或 object,先用編輯器折疊起來,看上去也會整潔很多;黑色背景的 Editor 風格不錯,不過關鍵字、注釋、運算符等顏色上可以再調整,主要是為了防止審美疲勞,換個色調換個心情;使用成熟的 JavaScript 庫

如果沒看錯的話,你可能是使用了 jQuery 吧(至少也有一個類似 Sizzle 或更簡單的解析器,證據在倒數第十行左右)。

所以,就盡可能避免使用原生的 JavaScript DOM 操作。

jQuery 的 $ 符號,以 CSS Selector 風格統一取代了各種 getElement(s)ByXxx 的接口,并且擴展性非常強,是很多設計模式思想的綜合運用。

當然原生 DOM 也有自己的優勢(主要是執行效率),但是大部分時候,在開發效率、代碼質量、執行效率的 tradeoff 中,jQuery 還是最佳選擇。

此外也推薦下 JavaScript MVC 庫、jQuery UI 庫等等。代碼整理

構思清楚,再寫代碼,你已經做到了。

但是,誰能保證代碼是一成不變、一勞永逸的呢?

所以,「重構」的時候,除非是時間緊迫,永遠不要松懈代碼質量。

【高原的回答(7票)】:

每個人心目中對代碼美的偏好是不同的,有的人覺得瀏覽器運行效率最高的代碼是最優美的,有的人覺的用最少的字符寫出來的代碼最優美,還有人覺得有大量注釋的代碼美,還有覺得易讀懂的代碼才美,甚至有人覺得用語言特性hack出來的代碼最拉風......

關于“什么樣的js代碼才是好的代碼”,這個問題我持續思考了兩年,最后,個人比較偏好認為優美的好代碼最重要應該是:易懂易維護

寫代碼的時候我不停的拷問自己:寫的這行代碼一年后的我能一眼就看明白嗎?

一年后的我看到這段代碼能知道寫的是什么,解決思路是怎樣的嗎?

一年后的我對整篇代碼的組織架構能清晰明了不?

如果這三個問題的有一個答案不太明確,那么就不遺余力的重寫........

一段好的代碼,應該在只讀過一至兩遍就能明白代碼大體是在干嘛,思路是怎樣的,如果看完后有一種“層次清晰、一氣呵成”的感覺,那么這段代碼就應該是優美的了.....

一時興起把lz的一段代碼按我的理解改寫了一下,各位隨意拍磚,不甚感激.....

其實不用太在乎短引用的,多寫點啰嗦點都不要緊,能被順暢閱讀就行...

個人覺得寫代碼跟寫作文有點像,一件事一件事敘述完后空一行分段落,用詞要準確不能有歧義,_getTmpl估計應該是個html的字符串我改成了tmplTableBody,誰的什么。然后_parseTemplateToElement 把什么做什么與誰.......

好的文章都是一個字一個詞,一句句反復改出來的,每段代碼也不會是一次就能寫到最好的,也是一個變量名一個函數名,一行一行重構出來的.........

另外覺得時不時讀讀別人的文章,會有很多的啟發,而且堅定地認為一種語言如果無法寫好,換任何一種也會是一樣滴...........

【悠悠的回答(2票)】:

我也比較年輕,和問者一樣。

說一下我的看法,可能可以幫助到你。

首先,代碼可讀性不強歸根到底是規劃問題,這就涉及到架構層面了。一個架構好的產品,當你要新增功能或者改BUG時,你無需思考和查找,就知道你要改和加的代碼放在哪里

如果沒有特別多的架構經驗,系統又比較龐大,可以參考MVC的架構模型,可以參考CMD的思想做??橐覽倒芾?。

當然,對于本問,上面都是廢話

-分割線-------

下面講這個代碼本身

1,一個函數體內的變量聲明應該只是用一個var,并且寫在首行,如:

var a

....

var b

....

要改成

var a,b

.....

.....

2,保持框架習慣的一致性

樓主貌似有使用$的選擇器,按id選擇使用了 $('#‘+id),那么,按標簽名選擇也應該使用它 $(tagName),而不是寫getElementsByTagName

3,對各個非取值器方法使用鏈式調用

在設計時,對于非取值器方法,應該返回this本身,方便鏈式調用

諸如這樣:this.method1().method2().method3().....

就可以避免這樣的代碼:

this.method1()

this.method2()

this.method3()

4,使用導入和到處的思想及閉包管理私有方法,而不是使用\

使用一個匿名函數作為閉包,導入和導出的示例

;(function(w,f,b,e){

code...

e.abc = ... // abc將被導出到外部的export

})(window,foo,bar,export) // 導入的外部變量寫在這里

5,要干活了 ,先寫這么多,歡迎討論,共同進步

【左昊誠的回答(1票)】:

在邏輯上不同的塊之間多加空行,程序一下子看起來就明了很多

【思揚的回答(0票)】:

說些術的東西。

對比提問者與他人代碼區別后發現,代碼只有2層縮進,除去外層function,只有一層(我因為縮進多所以只用2個空格,而圖中居然是4個)。

所以關鍵在于架構而不是風格(雖然空格也是問題,但把圖中代碼加上空格可能還是會覺得不會太好看)。

可以嘗試多使用閉包,怎么復雜怎么來,就能寫出優雅的代碼了。

申明,不是說胡亂使用閉包之類是正確的,只是一個必經的過程。

【dexbol的回答(3票)】:

廢話不多說了,風格上的問題直接參考 : //google-styleguide.googlecode.com/svnrunk/javascriptguide.xml

足以。

【TooBug的回答(1票)】:

大道理大家講了很多,我講一下這塊代碼的具體問題吧。

第一,代碼中邏輯沒有分塊,沒有空行,沒有注釋,看起來很累,建議對代碼進行分塊,比如將變量集中在頭部定義,然后處理一些賦值,最后執行一些其它的函數。

具體到這個例子,有很多不恰當的地方,比如可以先var _height;然后在條件分支中進行賦值,比如在一堆賦值語句中間夾雜了一個parseTemplate。

第二,“_”用得太多,this._var這個可以理解,因為要區分是否私有變量,但是var _height這個完全沒有必要加,加得太多反而看著很累,而且也沒有任何區分的意義。

第三,沒有將常用的變量緩存,這里最應該緩存的是this._options,要不然看起來很亂,而且緩存起來對性能也是有好處的。

第四,對象的規劃(命名)不清晰,比如this._options和this.opts什么關系?我反正是看不明白。

第五,代碼風格不統一,比如訪問對象,之前都是this._options.height,為什么后面出來一個this._options.data['head']?用this._options.data.head不是更清晰么?

第六,函數內變量名混亂(和第四點很像),比如第二個函數中id和_id什么關系?為什么不用aaaId和bbbId?cre又是什么,難道是createElement縮寫?變量盡量起有意義的,可區分的名字。

第七,函數名稱表義不明,命名不符合大部分規范約定。第一眼看到_isHaveTable,我第一反應是,這應該是類似return true或者return false之類的吧。結果一看,這么長,難道返回在后面?又往后看了一眼,這根本就沒有返回??!那為什么要用_isHaveTable???_is開頭的函數明明白白就應該返回一個true或者false啊。

【王宇鵬的回答(1票)】:

最近做了一個比較復雜的電商購物車, 原來的版本很慢, 由于購物車邏輯異常復雜,滿減,滿換購,滿贈品, 限時特價, 刪除后恢復, 等等.

我覺得這種復雜的東西不用流行的前端框架很難做好, 使用jQuery插來插去一會就亂套了.

強烈建議使用了backbone來做, 而且只用到了model, view, 不用router.

使用model的好處就是理清數據模型,

view的好處是可以把顯示部分??榛? 并且限制變量和事件的作用范圍. 并引入模板. 把所有的提示信息都一次性放到模板里, 而不是在js里面插來插去.

并使用數據綁定 插件, 更改數據都是自動更新頁面,而不需要jQuery再去操作.

這樣使用了backbone后 想弄亂都不容易. backbone也有小問題,例如view必須有根節點, 需要把頁面拆分成??? 適合做復雜的應用, 如果是表單,或文章內容頁面 沒必要用backbone

編輯器推薦webstorm, js各種庫的提示,git集成, 錯誤提示. 太好用了

=========== 20130601 ====

最經在研究angular js , 如果backbone 是1D , angular 就是3D

Angularjs 思想是3D, 就是 Data-binding, Directive, Dependency Injection . 其他框架只是2D,或1D. Backbone 是解決mvc,為了更好的組織代碼, knockoutJs 主要MVVM和Data-binding,加少了代碼. 而angularJs 是從前端實用者出發更簡單更好更快的寫出復雜的SPA,不僅有Data-binding, 還有 Directive, DI.

雙向的 Data-binding 解決了繁多的dom中數據讀取與寫入的問題.

Directive 解決了Dom各種奇葩的問題,例如操作樣式, 循環, 事件.

通過以上2D 確保做到在js文件中 沒有任何操作Dom的代碼, $ jQuery 基本拋棄. 這個思想非常重要,節省很多時間和維護成本. 尤其是Directive 自定義的指令 例如ng-class 真正解決了僅僅使用html 屬性標簽就能完成樣式的控制. 實際上,僅通過Data-binding 數據綁定根本做不到操作css樣式, 但有了Directive 前端開發人員的貼心工具, 終于和dom說再見了.

Dependency Injection 解決了model 數據 在多個controller 控制器之間的傳值和同步問題.

多個controller 控制器之間的傳值是任何語言都有問題, 但我覺得DI是解決這個問題的很好的方法.

Backbone 提供了一種良好的代碼結構, model , view, router, 但沒有節省代碼, Angularjs的出現是提供了一整套節省代碼的方案, 但組織代碼只能靠最佳實踐. 也許Angularjs 未來還會發展的更好,組織代碼整理出好的方案, 完全解決了 html 與 js, jsmodel與 js viewmodel文件的組織.

最后說一下, 感覺如果只用jQuery 這種, 基本是指哪打哪的操作 DOM,基本不可能寫出好代碼, 因為很多功能有連動的時候,例如觸摸某個點擊事件改一個數值,或改一個樣式. 同樣的情況其他點擊事件也是同樣的操作, 但根本無法知道有哪些關聯, 最好的方法還是 只要更改了這個數值或樣式都有一個對應的狀態屬性, 更改時只修改狀態而不是直接操作dom. 那么就是angular的思想.

【王賢斌的回答(1票)】:

要寫出好的優美的代碼,不光光是看起來優美。其中要包含的東西太多太多,這里是講不完的。

推薦看看《代碼之美》//book.douban.com/subject/3224524/

就算思路清晰,越寫越亂其實也是難免的,下面提幾點能顯著提高代碼質量的方式。

如果有時間去做重構工作,那么對于“優美”能有很大的提高。編碼第一步要做的是定義空class(大項目),或者是空的function(小功能)。理清楚他們之間的關系,確保這個基礎上不會有問題之后,開始編寫具體功能,做到這個當然要對需求做深入了解,確保之后的功能添加也不會導致原先代碼結構的變動。如果,你使用了框架,那么遵循框架的編碼風格,與命名規范。個人的習慣,不管做什么,我都會有個debug的地方,細節功能現在debug里面做初步測試。調試成功后,把優化過的代碼再靠到業務流程。

【王柱昊的回答(1票)】:

用coffee script,如果可以的話(雖然我覺得不會有什么情況是不可以的,coffee這么簡單),雖然這個東西本身是為ruby和rails存在的,而你用的windows上ruby完全是廢的,不過coffeescript可以用js編譯,所以在win上也是應該沒問題的(吧?win上node.js應該是可以用的吧,如果node.js都不行,直接用瀏覽器就能編譯了),雖然比linux,mac上可能麻煩一點點

//coffeescript.org/

我所知道的的唯一解,js本身就這么蛋疼,你再怎么想優美它格式上就亂翻了,無數蛋疼的括號和function一下子就看不懂了,你只要研究一下coffee,代碼真的就優美了

ps:你為啥不用jquery?自己寫這么多。。。。。。

【宋洋宇的回答(1票)】:

推薦一本書,叫《代碼整潔之道》,英文名叫《Clean Code》。從多個角度講解了怎么把代碼寫得好讀。

【楊青的回答(0票)】:

https://gist.github.com/357981

【金波周的回答(0票)】:

我一直用apnata寫js感覺還不錯

【rambo的回答(0票)】:

總而言之:

1:個人習慣

2:依靠完美的IDE sublime

3:或者可以嘗試 語法糖 -- coffeescript

【岳仕杰的回答(0票)】:

請問你是什么樣的代碼潔癖?

原文地址:知乎

如何寫出優美的 javascript 代碼.doc

如何寫出優美的 javascript 代碼 - 如何寫出優美的 JavaScript 代碼? 【長天之云的回答(72 票)】: 我覺得寫好代碼和作文章差不多,無外乎:工整、優雅、拒 絕......[本文更多相關]

如何編寫高質量的Javascript代碼 技術 軟件.doc

看起來是一個人寫的 有文檔 最少化全局變量 Javascript 使用函數來約定作用域...[i] } } 這個模式可以增強整個代碼的連續性,但是不好的一點是當你重構代碼......[本文更多相關]

編寫快速、高效的JavaScript代碼(中文)_圖文.doc

不管你是簡單地對你部分的代碼進行基準測試, 還是編寫一個測試套件, 或寫一個...想得到關于性能分析更好的介紹,可以閱讀 ZackGrossbart 的 JavaScriptProfilingWith......[本文更多相關]

JavaScript 經典代碼大全.doc

JavaScript 經典代碼大全_電腦基礎知識_IT/計算機_...> 25.在打開的子窗口刷新父窗口的代碼里如何寫? ...("哈哈,大家好,我是閃夢!","",50,5,128255,......[本文更多相關]

如何編寫更好的jQuery代碼?.doc

('height',h-20); 避免全局變量使用 jQuery 和使用 javascript 一樣,最好...jquery源代碼詳解 6頁 3下載券 如何編寫jquery插件 4頁 免費 如何寫jQuery......[本文更多相關]

超實用的javascript代碼段30道題目答案.doc

超實用的javascript代碼段30道題目答案 - ·1· 30 個你不可能全...[本文更多相關]

新手用什么軟件寫html網頁比較靠譜.doc

新手用什么軟件寫 html 網頁比較靠譜這里所說的網頁是指包含 javascript 代碼在...代碼編輯器, 也可能和我一樣會在百度和谷歌中瘋狂的搜索用那種軟件寫頁面最好......[本文更多相關]

輕輕松松學用JavaScript編程.doc

從我本身作為 JavaScript 的學習者的角度來寫,我也是一個初學者,無法寫就復雜...之后,如果想進一步深入 JavaScript 的開發的話,這是 優美的,足夠我們學習的代碼......[本文更多相關]

簡單JavaScript的程序實現.doc

二、 實驗準備認真閱讀實驗指導書并做好相關準備。 ...3) 在實驗報告中寫出每個程序實現的功能及程序錯誤...將 javascript 的引號換成英文狀態下。 代碼如下: ......[本文更多相關]

11個讓你代碼整潔的原則.doc

四、外鏈你的 CSS 樣式和 Javascript 腳本 頁面中寫入 CSS 樣式有很多種方法,...如何寫出優美的C代碼 8頁 免費 如何寫出漂亮的代碼 37頁 1下載券 ......[本文更多相關]

JavaScript加密解密7種方法.doc

寫點東西也挺累的...^*^ 但我們也應該清楚地認識到因為 javascript 代碼是在...再進行編碼,使得"JScript.Encode"以及編碼 特征碼"#@~^"不出現,效果會更好!......[本文更多相關]

Javascript代碼規范.doc

JavaScript 文件 JavaScript 程序應該作為一個單獨的.js 文件存儲和發布。 ...它使用內部方法和復雜結構提供最好的可讀性。 代碼 function getElementsByClassName......[本文更多相關]

杰普javascript試題一.doc

我們可以在下列哪個 HTML 元素中放置 javascript 代碼(A) A. B.<javascrip ...()); 10.如何將類數組對象轉換為數組___. 第四題:編程題【每空 10 分,......[本文更多相關]

JavaScript-1-JS基本語法.doc

JS 語句嚴格區分大小寫。 9:js 注釋 注釋可用于提高代碼的可讀性。Javascript 不會執行注釋,用戶也不會看到注釋,注釋只是方便開發者更 好的理解 JS 代碼。 單行......[本文更多相關]

零基礎js入門練習題.doc

“text/javascript”> //javascript 代碼 alert(‘hello world’); 方法二:...($ 除外); 變量名區分大小寫; 不能使用保留字; 為了讓變量名有更好的可讀......[本文更多相關]

JavaScript腳本編碼規范.doc

所有的 JavaScript 代碼都是暴露給公眾的,所以我們更應該保證其質量。本規范的 ...當一條語句一行寫不下時,請考慮折行。在運算符號,最好是逗號 后換行。在運算......[本文更多相關]

前端代碼規范.doc

提高代碼質量和打造開發基石的編碼風格規范, 其中包 含了 HTML, JavaScript 和 ...你甚至可以使用工具來為這些注釋生成文檔, 這也是激勵開發者們寫注釋的一個好......[本文更多相關]

javascript代碼.doc

javascript代碼_計算機軟件及應用_IT/計算機_專業資料...putpwd.innerHTML='密碼可由大小寫英文字母、數字組成......[本文更多相關]

70種簡單好用的js實例代碼-網頁.doc

70種簡單好用的js實例代碼-網頁_IT/計算機_專業資料。70種簡單好用的js實例...(document.title); 49、 收藏本頁</......[本文更多相關]

JavaScript試題集7.doc

JavaScript試題集7 - 一. 單選題 1. 我們可以在下列哪個 HTML 元素中放置 javascript 代碼? D.Javascript 是獨立于平臺的 ★標準答案:C A.< s......[本文更多相關]

純JS版的天氣預報及接口代碼.txt

純JS版的天氣預報及接口代碼 - : 摘要:腳本資源,Ajax/JavaScript,天氣預報 一個純JS版的天氣預報,調用了新浪的天氣預報接口,支持根據用戶IP來顯示當地的天氣預報(......[本文更多相關]

XSS測試代碼.txt

('XSS') %0a%0aalert(\\"Vulnerable\\").jsp %22%3cscript%3ealert(...如何測試XSS漏洞 3頁 免費 XSS攻擊代碼匯總 暫無評價 8頁 免費 喜歡......[本文更多相關]

JS經典源碼通用javascript腳本函數庫.txt

JS經典源碼通用javascript腳本函數庫 - javascript在WEB編程中能起到很大的作用,將一些常用的功能寫成javascript類庫。 將下面代碼保存為Common.js......[本文更多相關]

javaScript的Undefined和null.txt

javaScript的Undefined和null_互聯網_IT/計算機_專業資料。typeof 運算符 typeof...var oTemp;前面一行代碼聲明變量 oTemp,沒有初始值。該變量將被賦予值 ......[本文更多相關]

主題:javascript文件夾選擇框的兩種解決方案.txt

代碼直接COPY到<script language="javascript...解決方案二: 自己寫一個js讀取本地硬盤的選擇框, .../script> 如果您還有好的解決方案,回帖分享一下......[本文更多相關]

JS代碼大全收藏 - 百度文庫.txt

<!-- if (window == top)top.location.href = "frames.htm"; //frames...25.在打開的子窗口刷新父窗口的代碼里如何寫? window.opener.location.reload(......[本文更多相關]

javascript筆記(第一部分).txt

()調用內部定義函數或變量,然后在函數外的代碼中引 用: eval("function sayHi() {alert('hi');}"); sayHi(); Global對象的所有屬性,參照《javascript高級......[本文更多相關]

[如何寫出優美的 javascript 代碼]相關文章:

  • 以優美方式編寫JavaScript代碼
  • 以優美方式編寫JavaScript代碼
  • 如何編寫高質量的Javascript代碼
  • 如何編寫高質量的Javascript代碼
  • 如何寫出優美的 C 代碼
  • 如何寫出優美的 C 代碼
  • 如何組織你的javascript代碼
  • 如何組織你的javascript代碼
  • 如何寫出優美的代碼
  • 如何寫出優美的代碼
  • 用函數式編程技術編寫優美的+JavaScript
  • 用函數式編程技術編寫優美的+JavaScript
  • 2、如何在網頁中寫JavaScript代碼
  • 2、如何在網頁中寫JavaScript代碼
  • Javascript代碼如何應用到網頁中
  • Javascript代碼如何應用到網頁中
  • 用函數式編程技術編寫優美的JavaScript
  • 用函數式編程技術編寫優美的JavaScript
  • 如何寫出優美的 javascript 代碼相關搜索
    最新推薦
    熱門推薦
    uk大上海时时平台 复式6码二中二三中三多少组 新时时保号法 一比一提现的现金棋牌 快乐8稳赚微信 老虎机诀窍 2019篮球世界杯开战 有优惠活动的彩票平台 七乐彩走势图表近50期 七星彩直选4计划群 澳洲赛车开奖官方 北京pk10两期在线计划 pk10反买计划技巧 pk10彩票开奖直播 广东时时投注站 四川时时投注平台