为了账号安全,请及时绑定邮箱和手机立即绑定

一段关于闭包问题的代码,求大神解释?

一段关于闭包问题的代码,求大神解释?

一颗猕猴桃 2016-06-26 16:33:04
function f1(){     var n=999;     nAdd=function(){n+=1}     function f2(){       alert(n);     }     return f2;   }   var result=f1();   result(); // 999   nAdd();   result(); // 1000不是很懂这段代码为什么第一次result的时候结果是999,这段代码不是按顺序执行的么?还是说nAdd()必须调用才能使用,不然直接跳过直接运行alert?nAd没有var ,所以是全局变量,所以需要调用?var name = "The Window";   var object = {     name : "My Object",     getNameFunc : function(){       return function(){         return this.name;       };     }   };   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",上面的都是我在网上看见的,是一段关于闭包的文章,网址如下http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
查看完整描述

1 回答

?
Walk_

TA贡献48条经验 获得超30个赞

问题一:

通常函数必须调用才能使用,除非是立即执行函数。不带var 定义的是全局

问题二:

嵌套函数指向依然是global,严格模式下是: undefined.

问题三:

为了解决上面的问题,我们先将this捕获在一个变量中,这里是that变量,来解决这个问题。

查看完整回答
反对 回复 2016-06-26
  • 1 回答
  • 0 关注
  • 1114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信