改變函式宣告 封裝變數

2021-10-19 23:35:40 字數 1486 閱讀 8360

改變函式宣告:如下所示:

1.動機:乙個好的函式名字能夠一眼看出該函式的用途,而不必檢視其實現**。乙個好的引數列表能夠改變連線乙個模組所需要的條件,從而去除不必要的耦合。

2.簡單做法:如下所示:

1>.如果想要移除乙個引數,需要先確定函式體內沒有使用該引數。

2>.修改函式宣告,使其成為你期望的狀態。

3>.找出所有使用舊的函式宣告的地方,將它們改為使用新的函式宣告。

4>.測試。

3.遷移式做法:如下所示:

1>.如果有必要的話,先對函式體內部加以重構,使後面的提煉步驟易於開展。

2>.使用提煉函式重構手法將函式體提煉成乙個新函式。

3>.如果提煉出的函式需要新增引數,用簡單做法新增即可。

4>.測試。

5>.對舊函式使用內聯函式重構手法。

6>.如果新函式使用了臨時的名字,再次使用改變函式宣告重構手法將其改回原來的名字。

7>.測試。

4.範例:如下所示:

1>.源**如下所示:

function

circum

(radius)

2>.重構**如下所示:

function

circumference

(radius)

封裝變數:如下所示:

1.動機:對於所有可變的資料,只要它的作用域超出單個函式,就要將它封裝起來。封裝能提供乙個清晰的觀測點,可以由此監控資料的變化和使用情況,也可以輕鬆的新增資料被修改時的驗證或後續邏輯。

2.做法:如下所示:

1>.建立封裝函式,在其中訪問和更新變數值。

2>.執行靜態檢查。

3>.逐一修改使用該變數的**,將其改為呼叫合適的封裝函式。每次替換之後,執行測試。

4>.限制變數的可見性。

5>.測試。

6>.如果變數的值是乙個記錄,考慮使用封裝記錄重構手法。

3.範例:如下所示:

1>.源**如下所示:

let defaultowner =

;spaceship.owner = defaultowner;

defaultowner =

;

2>.重構**如下所示:

defaultowner =

;function

getdefaultowner()

function

setdefaultowner

(arg)

spaceship.owner =

getdefaultowner()

;setdefaultowner()

;

變數宣告提公升 Vs 函式宣告提公升

先看以下 1 var in window a in window console.log in window 2 var in window a in window console.log in window if a in window 3 var a var in window a in win...

JS變數宣告和函式宣告提公升

很多時候,在直覺上,我們都會認為js 在執行時都是自上而下一行一行執行的,但是實際上,有一種情況會導致這個假設是錯誤的。a 2 var a console.log a 按照傳統眼光,console.log a 輸出的應該是undefined,因為var a在a 2之後。但是,輸出的是2。再看第二段 ...

變數宣告提前與函式宣告提前

變數的宣告提前 在全域性作用域中,使用var關鍵字宣告的變數會在所有的 執行之前被宣告,但是不會賦值。所以我們可以在變數宣告前使用變數。但是不使用var關鍵字宣告的變數不會被宣告提前。在函式作用域中,也具有該特性,使用var關鍵字宣告的變數會在函式所有的 執行前被宣告,如果沒有使用var關鍵字宣告變...