var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()());
这一段返回的为什么是 The Window,子函数找变量不是一级一级网上找吗,找的不应该是My Object吗?
然后这一段
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ var that = this; return function(){ return that.name; }; } }; alert(object.getNameFunc()());
返回的是My Object,这里面的var that = this改变了指向吗,这里的That是哪个对象?
求JS大神详细解答,可加分!!!
匿名函数的this一般都是window。
第一段代码 getNameFunc 对应的function的this指向object,但该函数返回了另外一个函数,函数是匿名的(this指向window)
第二段代码中通过闭包,让匿名函数引用getNameFunc 的局部变量that(其实是getNameFunc 的this)
匿名函数执行寻找that变量时,它自己是没有这个变量的,就向上找that,这时的that,引用的是getNameFunc 的this,也就是object。
全局作用域内定义的变量可以在全局和函数体内访问,函数作用域内定义的变量只能在自己的函数作用域内访问。如果变量前没有加var,无论在哪定义都会成为全局变量
不要复制粘贴
在 getNameFunc 方法里面 this 指向的是 object,因为这些一个对象的方法,
而更里面 return 的那个 function 里面 this 指向的是全局对象,因为这个 function 是个普通调用的函数,它不是 object 的方法
具体来说你需要了解在各种情况下函数调用时 this 的指向问题
我来解释一下吧,如果有不对的地方欢迎指出,大家都是学习。
首先对于this,只要记住一点,不论怎样,this总是指向调用函数的那个对象。这样就比较简单了。
第一个函数,alert(object.getNameFunc()()) 注意:object.getNameFunc() = return 的匿名函数,假设该匿名函数的名字为zhang,那么上面这句话就是 alert(zhang()) 很显然,调用这个函数的对象是window.
第二个函数,看this指的是什么,object.getNameFunc(),调用的对象是object,所以这个this指的就是object。接着就更简单了,返回的匿名函数使用了什么,that,that等于什么,this,this是什么,object。
最后,对于函数的this指针,只要记住this总是指向调用函数的那个对象,一切OK。
"很显然" ,不要用这个词吧。。。
上面两位讲清楚了,你也讲的不错