关于function中的this指向老觉得很迷惑。
document.body.onclick = function(){
console.log(this); // 这个this指向body
function click_inner(){
console.log(this); // 这个this指向了window
}
click_inner();
}
从上面的代码可以推测出:每个function中都有一个this。
我原先的理解为:click_inner 内没有this,但是其上层函数中有this,所以根据JS的作用域和作用域链的知识可知(内部没有的变量就上溯到上层环境查找,找到就返回),内部的this就是外部函数的变量对象中的this。
按照我原先的理解:那么click_inner内操作的this也应该指向body,但是结果显然说明我原先理解错了。。。
按照结果来说,click_inner内的this也是指向window的,但是为什么window.click_inner()
就报错呢?好像又推翻了上面的推测。。
请大神详细的解答一下关于this的知识。。感激不尽!!
javascript 的this主要是看如何调用这个函数,而不是这个函数所在的作用域。
obj.fn()
fn中的 this 就是 obj。fn()
this是undifine, 而在js进入函数之前,会有if(!this) { this = window}
这样的操作。因此,后面那个this是window
。总结一下,
this
一共有六种不同的值:普通函数调用,this为全局对象或是undefined
作为对象的方法,this为那个对象
new 表达式,this为以该函数为原型的新创建的对象
使用 apply/call指定 this
用bind绑定固定的this
事件处理函数中的this是当前的触发事件的DOM元素(event.currentTarget)
详情见: http://zonxin.github.io/post/2015/11/javascript-this