函式宣告提公升的概念(相對於函式表示式)(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 在函式宣告之前呼叫函式...