Head First Javascript 程式設計讀書筆記(三)

fzhw88發表於2017-09-28

函式來啦!

當你要編寫一下反覆使用的程式碼時就應該考慮寫函式。函式到底是怎麼回事呢?來個例子:

function plus ( a, b ) {
  var c = a + b;
  return c;
}
var d = plus ( 1, 5 );
console.log( d );  // 6

function關鍵字是定義函式必須的,plus是函式名,遵循變數名的命名規則,括號裡的a和b是引數,稱為形參,形參是可選的,{ }之內的程式碼成為函式體,其中return是返回語句,return語句是可選的。

plus ( 1, 5 )實現函式呼叫,函式在宣告時不會執行,只有在呼叫時才會執行。

呼叫時傳給函式的引數稱為實參。和形參一樣,實參也是可選的。呼叫函式後函式的執行過程是先按順序把實參賦值給形參,然後執行函式體的程式碼。函式執行完畢,程式將返回撥用函式的地方繼續往後執行。

可以把任何型別的值作為實參傳遞給函式,但更常見的是把變數作為實參傳遞。

Javascript函式引數的傳遞是值傳遞,基本型別直接複製值(物件型別複製引用值,以後的內容)。

var n = 10,;
function fn ( a ) {
    a=30;
}
fn ( n );
console.log( n ); //10
//n還是10,因為呼叫的時候只是複製了n的值(10)給函式fn的引數a,就算修改了這個值,也不會影響n的值。

如果呼叫函式時引數傳遞錯誤,則少傳遞的實參對應的形參會被賦值為undefined,多傳遞的值預設會被忽略(當然有辦法捕獲這些值,只是這一章沒說~)。

函式體中遇到return語句,函式會直接返回return語句中的值(如果return語句沒有指定值(空的),則返回undefined)並停止函式執行,哪怕return語句之後還有語句。如果一個函式沒有return語句,則它的返回值是undefined。

function fn ( ){
  return 10;
  console.log ('永遠不會見到我');
}
var a=fn( );
console.log( a ); //10

在函式中宣告的變數叫區域性變數,這樣的變數只在函式中可見,也只能用在函式中(區域性作用域),函式返回,區域性變數也就消失了,也就是說區域性變數的生命週期等同於函式的宣告週期。(閉包可以延長函式的生命週期,這是後面的內容)

在函式中使用沒有宣告的變數,會靜默的建立全域性變數(嚴格模式下會返回錯誤,這本書沒有講嚴格模式),千萬別這麼做。、

全域性變數就是在整個程式中隨處可用的變數,除非被遮蔽,也就是說區域性變數使用了與全域性變數相同的變數名,那麼在這個區域性作用域中,全域性變數是不可見的。

在一個網頁中只有一個全域性作用域,也就是說不同的js檔案共享同一個全域性作用域,因此應該儘量減少使用全域性作用域。

函式宣告可以放在網頁的任何位置,甚至在呼叫它之後,因為函式宣告會被提升。

本章最後給出了一些編碼建議: 1)在程式開頭宣告全域性變數。 2)把函式宣告放在一塊兒,無論是開頭或者結尾。 3)在函式開頭宣告區域性變數。

相關文章