1.理解嵌套函數、作用域和閉包
a.外部函數讀取內部變量
function f1(){
var age = 25;
var getAge = function(){
return ++age;
}
return getAge;
}
var result = f1();
alert(result());
alert(result());
函數getAge嵌套在函數f1的內部,f1的返回值是一個Function類型的變量getAge,在f1執行後,匿名函數賦值給result,再執行result函數返回age,輸出26,27...
b.模仿塊級作用域
function f1(){
var i = 0;
for(var i =0; i < 5; i++){
}
alert(i);
}
f1(); // 打印出5
function f1(){
var i = 0;
(function(){
for(var i = 0; i < 5; i++){ //私有作用域函數執行後,變量銷燬
}
})();
alert(i); // 打印出0
}
f1()
2.創建對象的基本模式
a.使用this
function F1(value){
this.User = value; // 在構造方法中使用this創建公有屬性和方法
this.getUser = function(){
return this.User;
}
}
var f1 = new F1('Lin');
alert(f1.getUser()); // 打印Lin
var f2 = new F1('Boo');
alert(f1.getUser()) // 打印Lin
b.不使用this
function F1(value){
User = value;
F1.prototype.getUser = function(){
return User;
}
}
var f1 = new F1('Lin');
alert(f1.getUser()); // 打印Lin
var f2 = new F1('Boo');
alert(f1.getUser()) // 打印Boo
c.通過特權方法訪問私有成員變量
function F1(x,y,z){
var a = 'a', //私有變量
b = 'b',
c = 'c';
this.setOptions = function(){ // 實現公共接口的特權方法
return { // 返回對象字面量變量
a : x,
b : y,
c : z
};
}
}
F1.prototype = { // 公共方法
getSpeed : function(){
alert(this.setOptions().a); // 打印出a的值
}
}
var f1 = new F1('xxx','yyy','zzz');
f1.getSpeed();