蕭十郎
2018-09-18 09:10:52
his一直有點暈,今天寫了一個測試,但是還是不理解,求高手給個通俗易懂的簡答: 以下代碼,為什么點擊按鈕執行函數內部創建的函數this指向的事window?(function(){
console.log(self);
console.log(this);//這里的this指向window
})(); <body><button id="di" >ssss</button><script type="text/javascript">var d=document.getElementById('di'); function a(){
name='111'
console.log(this);
}
d.addEventListener('click',function(){
a();//a打印的this是window
console.log(this);//打印的是d對應的button元素
var self=this;、//保存this
//為什么內部創建的函數this指向window
(function(){ console.log(self); console.log(this);//這里的this指向window
})();
});</script></body></html>
1 回答

瀟瀟雨雨
TA貢獻1833條經驗 獲得超4個贊
d.addEventListener('click',function(){
a();//a打印的this是window
你這么調用a不就相當于window.a(),this肯定是window啊
console.log(this);//打印的是d對應的button元素
這個this和當前dom元素綁定的處理函數有關,應該是addEventListener方法綁定事件的時候給callback函數的this綁定d元素吧。這個你可以查查資料是不是。
var self=this;//保存this
//為什么內部創建的函數this指向window
(function(){
console.log(self);
這里self是你這個匿名函數的父作用域的self,就是父作用域的this,和上一句一樣。
console.log(this);//這里的this指向window
這個匿名函數不就和a函數一樣嗎?
換種寫法:
function test(){
console.log(this);
}
test() === window.test();
})();
});
添加回答
舉報
0/150
提交
取消