1、JS函数作为方法来调用
/* getNameFunc为对象的一个方法*/
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return this.name;
}
};
alert(object.getNameFunc());
一、getNameFunc方法是一个函数。函数属于对象。object是函数所有者。
二、name是对象的属性。
2、JS闭包概念
一、理解闭包,就要先了解变量的作用域,变量分为局部变量和全局变量。
局部变量只能在函数内部调用,函数外部无法调用函数内部变量。
全局变量在函数内外部都可以调用。
二、如何从外部读取函数内部变量,就要用到闭包了,栗子如下:
1、function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
2、 function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
result(); //999
nAdd();
result(); // 1000
nAdd();
nAdd();
result();//1002
分析如下:
一、函数result()就是闭包函数,函数f1()是nAdd()的父函数,而f1()被赋予了一个全局变量,所以n就会一直在内存中
二、需要注意的一点是nAdd前面没有var,所以它是全局变量,在result()执行之前,它是没有被写入内存的。
三、个人理解:闭包是可以读取其他函数内部变量的函数,它是连接函数内部和外部的桥梁。
四、闭包的用处:闭包可以读取函数内部的变量,闭包可以让这些变量始终保存在内存中
PS:闭包会让函数的变量保存在内存中,所以内存消耗会很大,不能滥用闭包。
3、两个闭包栗子的分析:
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
// var result=object.getNameFunc();
// alert(result());
alert(object.getNameFunc()());
结果为“The Window"
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());
结果为:"My object"
分析如下:
一、栗子1中注释掉的result()等价于object.getNameFunc()();result的返回值为this.name,是全局对象window的一个属性,因为之前已经var name="The Window"。
二、栗子2中var that=this,this代表了对象object,所以that.name等价于object.name.
阅读(1193) | 评论(0) | 转发(0) |