关于闭包的疑惑
(function() {
var obj = {};
var z = 'zhangsan';
obj.showName = function() {
alert(this);
};
window.ar = obj.showName;
})();
ar();
................1
var obj = {};
var z = 'zhangsan';
obj.showName = function() {
alert(this);
};
obj.showName();
..................2
为什么1得到的是window 2得到的是object
1为什么不是object呢,应该是obj啊,obj是调用者
------解决方案--------------------1,ar(); 可以改写与 window.ar();
------解决方案--------------------
(function() {
var obj = {};
var z = 'zhangsan';
obj.showName = function() {
alert(this);
};
window.ar = obj;
})();
ar.showName();
obj 被释放了 showName没有了父级 被指向了window
改了下 你的例子 这个指向的是object 了
------解决方案--------------------事实就是如此,函数中的this由调用者决定
作为obj的方法调用this指向obj,直接调用(相当于作为window的方法调用)则this指向window,能够理解吧?
------解决方案--------------------window.ar = obj.showName;
这句话的意思是将 obj.showName;这个函数复制一份到window.ar上面,
------解决方案--------------------对的,你把 obj的方法扔给了了window 所以。。。
------解决方案--------------------在代码1中:
window.ar = obj.showName;这一句使得window.ar和obj.showName最后都指向同一个函数==
==>function() { alert(this);}。
而函数中的this是啥完全取决于函数真正执行时的那条语句:
window.ar()//这是函数作为window的属性调用,this就是window
obj.showName()//这是函数作为obj的属性调用,this就是obj