就要国庆中秋放假了,不知还有没人来论坛,lol,希望还有高手出现
好了言归正传
1)以下两段代码是怎么理解的?
2)为什么说理解了下面两个代码就理解了闭包? var name = "The Window"; var object = {
name : "My Object", getNameFunc : function(){
return function(){
return this.name;
}; } }; alert(object.getNameFunc()());var name = "The Window"; var object = {
name : "My Object", getNameFunc : function(){
var that = this;
return function(){
return that.name;
}; } }; alert(object.getNameFunc()());
好了言归正传
1)以下两段代码是怎么理解的?
2)为什么说理解了下面两个代码就理解了闭包? var name = "The Window"; var object = {
name : "My Object", getNameFunc : function(){
return function(){
return this.name;
}; } }; alert(object.getNameFunc()());var name = "The Window"; var object = {
name : "My Object", getNameFunc : function(){
var that = this;
return function(){
return that.name;
}; } }; alert(object.getNameFunc()());
function(){
return that.name;
}的作用域会从提升到getNameFunc这个级别.这样会导致的结果就是第二个例子中that被当做私有的,屏蔽掉了,that无法在getNameFunc外面修改.
小伙请看仔细:
第一个例子
应该弹出:"The Window"。
1.) object.getNameFunc()() -- 先执行object.getNameFunc()那么他返回的是:function(){
return this.name;
}2.)object.getNameFunc()() -- 再执行就返回this.name;看到没!这里的this已经不是指向曾经调用它的对象:object了。匿名函数作用域window。***************************************************************************************第二个例子
应该弹出:"My Object"。
1.) object.getNameFunc()() -- 先执行object.getNameFunc()那么他返回的是:function(){
return that.name;
}
但是有这行代码:var that = this;
这里很关键:这个that指向的是调用它的函数对象,也就是object2.)object.getNameFunc()() -- 再执行就返回that.name。所以他返回的就是"My Object"。闭包不要想的太复杂,我个人理解就是java的静态变量。开辟了一块内存供它使用,不会被垃圾回收机制立刻回收掉。
还有this的意义:指向调用函数的对象,谁调用了这个函数,this就是谁的引用。比如a.b(),b这个方法的函数体里面使用了this,那么这个this就代表a对象的引用。window是个隐式对象 很多情况下简写的时候都不加window,实际上它是一直存在的。还有function(){}如果没有return 那么它默认alert出来的是undefined你可以逐个的alert看看:alert(object.getNameFunc()),alert(object.getNameFunc())个人浅见,有误处请指正。
需要闹明白JS中的this到底是谁。
建议看一下这个
name : "My Object",
getNameFunc:(function(){
return name;
})(),
}
alert(object.getNameFunc);
http://blog.goddyzhao.me/JavaScript-Internal
不要和java,c#这些编程语言中的this,及函数引用(传的是个地址)混淆了.首先要明白这俩段代码getNameFunc执行完结后,回到全局作用域,this都是指向window对象区别就在于第2段代码getNameFunc执行完毕后,用了临时变量that把那时那刻的this对象给缓存了起来.并没有因为getNameFunc函数的执行完毕被而释放,所以他一在object的作用域范围内.并指向调用它object对象,getNameFunc函数的执行完毕that为什么没释放?这就是闭包的特性和作用就在于此。
第一个 object的方法返回一个匿名函数,那儿获得返回值后与object就无关了,分成两个过程就好理解了:
1.调用方法,获得返回值,是一个函数;
2.在该位置执行一个函数,所以里面this不会指代object,函数中this指代window,故访问到全局变量
第二个在方法函数中把this用局部变量保存下来,匿名函数中使用该局部变量当然指代object,所以访问到object的属性
第二个that是object对象,闭包了,
这个还是作用域链的问题。。 this理解清楚就好了,我是扯不清楚-,-