javascript - 关于function中的this指向问题

查看:105
本文介绍了javascript - 关于function中的this指向问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

关于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 一共有六种不同的值:

  1. 普通函数调用,this为全局对象或是undefined

  2. 作为对象的方法,this为那个对象

  3. new 表达式,this为以该函数为原型的新创建的对象

  4. 使用 apply/call指定 this

  5. 用bind绑定固定的this

  6. 事件处理函数中的this是当前的触发事件的DOM元素(event.currentTarget)

详情见: http://zonxin.github.io/post/2015/11/javascript-this

这篇关于javascript - 关于function中的this指向问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆