JS高階程式設計7 函式表示式

2021-07-03 20:23:13 字數 2662 閱讀 4370

函式宣告提公升的概念(相對於函式表示式)(176):

//不要這樣做(函式體內是宣告函式)(因為函式相對於表示式是提公升的,會出現類似於函式過載的現象,zhezhong 語法是無效的)

if(condition)

}else

}//可以這樣做(函式體內是函式表示式)

var sayhi;

if(condition)

}else

}

遞迴(遞迴函式是在乙個函式通過名字呼叫自身的情況下構成的)(p177)

function

factorial

(num)else

}

閉包(指有權訪問另乙個函式作用域中的變數的函式,在乙個函式中建立另乙個函式就是最常見的閉包)(p178)

function

createcomparisonfunction

(propertyname)else

if(value1>value2)else

}}(注:一般在函式執行完畢之後,區域性活動物件就會被銷毀,記憶體中僅儲存全域性作用域,但閉包的情況有所不同)

全域性函式中,this等於window,匿名函式的執行壞境具有全域性性,因此其this物件通常指向window

var name="the window";

var object=;

}};alert(object.getnamefunc()); //"the window"

可以修改this的指向

var name="the window";

var object=;

}};alert(object.getnamefunc()); //"my object"

function

assignhandler

();}

//建立了乙個作為element元素時間處理程式的閉包,而這個閉包又建立了乙個迴圈引用,其中匿名函式儲存了對assignhandler()的活動物件的引用,因此會導致無法減少element的引用數,所以只要匿名函式存在,element的引用數就至少為1,所以其記憶體就永遠收不回來

//解決方法

function

assignhandler

(); element=null;

}

模擬塊級作用域(p184)

//js沒有塊級作用域的概念,這意味著在塊語句中定義的變數,實際上是包含函式中而非語句中建立的

function

outputnumbers

(count)

//沒有影響,不會重置變數(多次宣告同乙個變數,js會對後續的宣告視而不見,但它會執行後續宣告中變數的初始化)

var i;

alert(i);//8

}outputnumbers(8);

(function

())();

//上面的**不但定義了乙個匿名函式,而且在定義的同時也呼叫了它,上面相當於為塊級作用域建立了乙個私有作用域(塊級作用域就是私有作用域)

function

outputnumbers

(count)

outputnumbers(9);

(這種設定塊級作用域的技術經常在全域性作用域中被用在函式外部,這是為了限制過多的函式和變數成為全域性作用域的一部分,因為全域性作用於中的變數和函式太多,容易導致命名衝突)

私有變數(p186)

a:建構函式中定義特權方法

function

myobject

() //特權方法(有權訪問私有變數和私有函式的公用方法)

this.publicmethod=function

();}

b:私有作用域中建立特權方法

(function

() //建構函式

myobject=function

(); //共有(特權)方法(特權方法是在原型上定義的)

myobject.prototype.publicmethod=function

()})();

//這種模式在需要對單例(裡面的物件?)進行某些初始化,同時有需要維護其私有變數時是非常有用的

var singleton=function

() //特權(共有)方法和屬性

return;}};

}();

增強的模組模式

var singleton=function

() //建立物件

var object=new customtype();

//新增特權(公共)屬性和方法

object.publicproperty=true;

object.publicmethod=function

(); //返回這個物件

return object;

}();

JS函式表示式

1.遞迴 function digui num else var d digui digui null d 3 改進 用arguments.callee num 1 代替 digui num 1 arguments.callee 是指向引數所在的函式的指標,code如下 function digui...

JS 函式表示式

引數1,引數2.call使用語法 函式名 方法名.call 物件,屬性1,屬性2.作用 可以改變this的指向 不同點 引數傳遞方式不同 bind是複製乙個方法或者函式 xw.say.call xh 注 math.random 返回介於 0 包含 1 不包含 之間的乙個隨機數 函式中幾個屬性 了解 ...

JS 高程7 函式表示式(1)

定義函式的兩種常見的方法 1 函式宣告 2.函式表示式 差異 1 函式宣告 具有函式宣告提公升的特徵。2 函式宣告的函式的name屬性為函式的名稱 使用函式表示式定義的函式在es5中,name屬性為空字串,在es6中為函式的名稱。函式宣告提公升 函式宣告 1 sayhello 在函式宣告之前呼叫函式...