闭包所带来的问题

一 关于this的赋值问题

this对象是在运行时给予函数的运行环境绑定的。
         全局函数:this==window
         函数作为某个个对象的方法调用时this指向这个对象
         匿名函数的执行环境具有全局性所以this位于匿名函数内时指向window但是编写闭包得的方式不同结果也不同

举个栗子:
var name = "The Window";

var object = {
	name:"My object",
	getNameFunc:function(){
		return function(){
			return this.name;
		};
	}
};
alert(object.getNameFunc()());//The Window
为什么是the window 而不是the object
             :每个函数在被调用的时候,其活动对象都会自动获取两个特殊的变量即this和arguments,内部函数在搜索这两个变量的时候都会搜索到函数内部,而不会延伸到直接访问外部函数中的这两个变量
              意思是什么呢,就是说比如上面的栗子,getNameFunc:function()这个函数在执行的时候他的活动对象是object,这个object就会自动取得两个特殊变量就是this和arguments,this指向的就是这个object,arguments指向的是这个函数参数的集合!
         
在这里如果我们想让内部函数访问外部函数的this还需要做点工作,因为我们知道内部函数执行时会有一个作用域链,我们只要把外部函数的this赋值到一个内部函数能访问的域链的一个变量里面就可以了,举个栗子:
var name = "The Window";

var object = {
	name:"My object",
	getNameFunc:function(){
	var that = this;//这里将对象this-object赋予变量that而内部函数能访问这个变量
		return function(){
			return that.name;
		};
	}
};
alert(object.getNameFunc()());//the object

下面在这个情况也比较典型在这里我们举例说明一下:


var name="the window";

var object={
name:"my object",
getName:function(){
return this.name;
}
};
(object.getName=object.getName)();//非严格模式下 the window
为啥呢:::因为返回的函数是function(){return this.name}不通过object。getName执行了所以this的指向已经发生了改变

二 函数内存泄露



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值