前端學習隨筆13 函式基礎知識

前端學習隨筆13 函式基礎知識

函式是js中最重要的知識點,需要花很多時間理解記憶。這篇筆記主要記錄函式的一些基本概念及相關基礎知識,沒有很深入。

1. 函式宣告(定義函式,不會執行)

// 包含function關鍵字,函式名稱識別符號(add),圓括號,花括號function add () { 函式體}// 或者使用表示式var add = function () { 函式體}

函式命名規範:描述性強,簡潔(駝峰法,下劃線)

2. 函式呼叫(執行函式)

2.1 作為函式呼叫

var ttt = add(4);

以函式形式呼叫的函式一般不使用this。在非嚴格模式下,this指向全域性物件;非嚴格模式下,this為undefined。

2.2 作為方法呼叫

//object為物件object。ttt = add();//呼叫object。ttt();

this指向呼叫它的物件。

巢狀函式作為函式呼叫,其this不是指向全域性物件就是undefined;巢狀函式作為方法呼叫,其this指向呼叫它的物件。

前端學習隨筆13 函式基礎知識

2.3 作為建構函式呼叫

使用關鍵字new。

2.4 間接呼叫(透過call和apply)

透過call()和apply()來指定this的指。

3. 實參和形參(利用arguments調取引數物件)

形參:定義函式時設定的引數

實參:呼叫函式時實際傳入的引數

形參個數>實參個數,未傳值的形參預設為undefined;形參個數<實參個數,多出來的實參自動省略(但是會儲存在arguments物件中)

引數依次傳入,所以傳值時順序不能改變

arguments的callee屬性指代呼叫當前正在執行的函式的函式,用於匿名函式遞迴呼叫自身

var func = function(x) { if(x<=1) return 1; return x * arguments。callee(x-1);}

arguments。length是實參的真實個數,arguments。callee。length是形參的個數

當傳入的引數較多,記憶呼叫順序是一件頭疼的事情,我們可以傳入物件,透過鍵值對的方式規避這個麻煩。

4. 函式屬性、方法和建構函式

4.1 prototype屬性

函式包含prototype屬性,該屬性指向原型物件的引用。

4.2 call()和apply()

兩個方法的第一個實參都是呼叫該函式的母物件(ES5嚴格模式下第一個實參都會程式設計this的值),後面的引數就是要傳入待呼叫的引數

apply()待呼叫的引數需放在陣列中,如f。apply(o,[1,1,2]);而call()則不需要,如f。call(o,1,1,2)

4.3 bind()

ES5新增方法,使用方式如下:

f。bind(o) //將f函式繫結到o物件上

4.4 toString()

數字 ——> 數字型字串

陣列 ——> 包含逗號的字串

函式 ——> 完整函式原碼的字串

物件 ——> [object Object]

4.5 建構函式

// 建構函式(使用Function關鍵字和new關鍵字)var f = new Function(“x”,“y”,“return x*y;”); //最後一個引數就是函式體// 幾乎等價於下面的函式var f = function(x,y){return x*y;};

實際程式設計中很少使用建構函式。