javascript的闭包真的是一个难点,晕了又晕,但是经过大神的一个指点,灵光一现就想通了。
java中的.是属性的意思,同样的,也可以把闭包当作java中的.来看待,当作一个属性(其实是javascript的链式特性啦)
为什么会有闭包呢,那是因为作用域不同,读取变量不能。比如,函数外的变量能够被函数内读取,但是函数内的变量不能被函数外读取(局部变量与全局变量的区别)。但是如果我们在函数外想读取函数内的变量呢(不声明成全局变量的情况下-private属性),那就是把该变量return出来。
要return的话就需要一个函数,于是,闭包就出现了。
具体参考学习javascript闭包。讲解得通俗易懂
下面这两个闭包为什么会返回不一样的值呢。主要是this这个关键字。javascript中规定在非strict模式下,this代表的是window,所以第二个this.name代表的是The Window。而第一个由于 var that=this,在函数一开始就捕获了this,并赋给that,这时候的that就指向object。