看見一個過長的函數或者須要一段註釋才能讓人理解的代碼,能夠考慮將這段代碼放進一個獨立函數中。函數
創造一個新的函數,根據這個函數的意圖來對它命名(以它「作什麼」來命名,而不是以它「怎麼作」命名)。學習
須要重構的代碼以下(代碼並不複雜,只是爲了說明方法):spa
function print () { var num = 1; console.log('*****************'); console.log('******Hello******'); console.log('*****************'); while(num < 10){ num += 2; } console.log('num:', num); }
示例:code
一、無局部變量blog
能夠輕鬆提煉打印「Hello World」的代碼。只須要剪切、粘貼、再插入一個函數調用的動做便可。get
function print () { var num = 1; printHello(); while(num < 10){ num += 2; } console.log('num:', num); } function printHello () { console.log('*****************'); console.log('******Hello******'); console.log('*****************'); }
二、有局部變量io
function print () { var num = 1; printHello(); while(num < 10){ num += 2; } printNum (num); } function printHello () { console.log('*****************'); console.log('******Hello******'); console.log('*****************'); } function printNum (num) { console.log('num:', num); }
1) 只在被提煉的代碼中使用,能夠將這個臨時變量聲明移到被提煉代碼中,而後一塊兒提煉出去。(這個很容易理解)console
2) 被提煉代碼以後的代碼還使用了這個變量,須要在提煉的代碼中返回改變後的值。function
function print () { printHello(); var result = getNum(); printNum (result); } function printHello () { console.log('*****************'); console.log('******Hello******'); console.log('*****************'); } function getNum () { var num = 1; while(num < 10){ num += 2; } return num; } function printNum (result) { console.log('num:', result); }
不斷學習,不斷進步~~~class