前端開發中的Javascript規範,來學習一下吧

編程語言 JavaScript 文章 HTML coder分享 2017-06-04

前言

在之前的一篇文章《前端開發過程中的HTML規範,來學習一下吧》中,我們有講過前端開發過程中需要注意到的HTML規範問題,今天這篇文章我們繼續來看下關於Javascript的規範問題。

前端開發中的Javascript規範,來學習一下吧

Javascript

全局命名與IIFE

我們總是會在Javascript文件中定義變量,但是一不留神就會將其定義成全局變量,如果引用的外部JS文件較多,很容易出現全局變量汙染的情況。

我們不推薦總是在全局空間定義變量的行為,因為所有在全局空間定義的變量都是掛在window對象上,很容易出現變量汙染,如下所示。

前端開發中的Javascript規範,來學習一下吧

不推薦-全局變量

IIFE就可以防止出現全局變量汙染的情況,IIFE是立即執行的函數表達式,在IIFE內部會創建一個封閉的作用域,內部定義的變量不會影響外部的執行環境,而且可以通過參數傳遞的形式引用外部變量,最重要的一點是在函數執行完後會立即釋放佔用的內存。

我們推薦使用下面這種寫法。

前端開發中的Javascript規範,來學習一下吧

推薦寫法-IIFE

IIFE用法

為了避免全局變量的干擾,我們建議所有腳本文件都從IIFE開始。

我們都知道之所以叫立即執行的函數表達式,是因為在函數表達式後面會多一個執行的括號。這個執行的括號可以出現在兩個地方,不管是在內部還是外部,都是有效的。但是為了讓整個函數表達式看起來像一個整體,我們推薦將括號寫在裡面。

因此我們不推薦以下寫法。

前端開發中的Javascript規範,來學習一下吧

不推薦寫法

而推薦以下寫法。

前端開發中的Javascript規範,來學習一下吧

推薦寫法

同樣,我們可以通過參數傳遞的形式引用外部變量。

前端開發中的Javascript規範,來學習一下吧

引用外部變量

定義域和變量提升

我們都知道在ES5中是沒有塊級作用域概念的,只有函數級作用域,而且由於變量提升的存在,在函數內部聲明的變量都會提升至函數頂部,這就會造成一些難以預料的問題。

首先我們來看看變量提升是什麼樣的情況?看看下面一段代碼。

前端開發中的Javascript規範,來學習一下吧

變量提升

上面這段代碼返回的結果是undefined,並不是'Hello Shenzhen',這是因為變量v會在函數內部被提升至函數頂部,實際執行的其實是下面這段代碼。

前端開發中的Javascript規範,來學習一下吧

實際執行

為了降低變量提升所帶來的編碼風險,我們應該手動聲明定義的變量和方法,並把其放在函數頂部。

我們不推薦以下寫法。

前端開發中的Javascript規範,來學習一下吧

不推薦寫法

我們推薦以下寫法。

前端開發中的Javascript規範,來學習一下吧

推薦寫法

比較判斷

在編寫判斷相等類型的條件語句時,總是使用嚴格相等(===),這樣可以避免Javascript在執行類型轉換時帶來的問題。

我們看下面一個例子,定義一個函數,傳入一個數字,如果等於5,則將這個數加5返回。如果不使用嚴格等於,在傳入一個字符串'5'後,會返回'55'。

前端開發中的Javascript規範,來學習一下吧

沒有使用嚴格相等

因此,我們推薦在使用相等判斷時都採用嚴格相等(===)。

分號

強烈建議在所有結束語句後面加上分號,如果不加上分號會引起一些很難發現的問題。我們看看下面一段代碼。

前端開發中的Javascript規範,來學習一下吧

代碼

在上面這段代碼執行後,我們發現即使resultOperation()函數返回-1,與-1相等,後面的method方法仍然被調用。

這是因為在上面定義的數組末尾沒有加上分號,這個數組會與下面一行的-1當做表達式執行,任何非空數組-1都會返回NaN,NaN與resultOperation的返回結果-1不相等,因此後面的method方法會被執行。

省略分號不寫,不只是會出現上述的問題,還有很多,這裡不一一列舉。

因此,建議在每個結尾的語句後加上分號,養成一個好的習慣。

閉包

閉包作為前端面試題中必不可少的知識點是應該要掌握的,而且在前端開發中經常會涉及到,關於閉包的問題,在我寫的一篇文章《前端面試中不可逃避的閉包問題,你真的瞭解嗎?》中有詳細介紹,大家可以好好看下。

結束語

今天這篇文章詳細的介紹了在前端開發過程中涉及到的Javascript規範問題,可能還不夠全面,大家可以自行補充。

相關推薦

推薦中...