this指向

this应该是常见面试题,本想着总结下,发现以下链接全面详细的解释了该知识点

  • 普通函数调用,此时 this 指向 window
  • 构造函数调用, 此时 this 指向 实例对象
  • 对象方法调用, 此时 this 指向 该方法所属的对象
  • 通过事件绑定的方法, 此时 this 指向 绑定事件的对象
  • 匿名函数、定时器函数, 此时 this 指向 window
  • call,apply,bind指的this 是谁就是谁。当第一个参数是null或者undefined时,this指向window。

https://www.cnblogs.com/hjson/archive/2019/01/11/10254555.html

apply call bind的区别

apply()第一个参数是this指向的对象,第二个参数是函数执行时要传入的参数 ,必须是一个数组

Function.apply(obj[,argArray])

  • 它的调用者必须是函数 Function,并且只接收两个参数,第一个参数的规则与 call 一致。
  • 第二个参数,必须是数组或者类数组,它们会被转换成类数组,传入 Function 中,并且会被映射到 Function 对应的参数上。这也是 call 和 apply 之间,很重要的一个区别。

call()第一个参数是this指向的对象,第二个参数是函数执行时要传入的参数

Function.call(obj,[param1[,param2[,…[,paramN]]]])

  • 调用 call 的对象,必须是个函数 Function。
  • call 的第一个参数,是一个对象。 Function 的调用者,将会指向这个对象。如果不传,则默认为全局对象 window。
  • 第二个参数开始,可以接收任意个参数。每个参数会映射到相应位置的 Function 的参数上。但是如果将所有的参数作为数组传入,它们会作为一个整体映射到 Function 对应的第一个参数上,之后参数都为空。

bind()第一个参数是this指向的对象,第二个参数是函数执行时要传入的参数

区别:
call、apply能够改变函数执行时的上下文,将一个对象的方法交给另一个对象来执行,并且是立即执行。区别参数不同。
bind是返回一个函数,而不是像call、apply立即调用,需要稍后调用才会执行

总结:
call 和 apply 的主要作用,是改变对象的执行上下文,并且是立即执行的。它们在参数上的写法略有区别。
bind 也能改变对象的执行上下文,它与 call 和 apply 不同的是,返回值是一个函数,并且需要稍后再调用一下,才会执行。

上次自测this知识点有涉及作用域,还需注意立即执行函数this指向的是window
var a = 1;
console.log(a); //1 a在全局作用域
function fire() {
    var a = 2;
    console.log(a); // 2 fire函数作用域
    function innerFire() {
        var a = 3;
        console.log(a); //3 此时打印输出a,a在innerFIre作用域。从自身作用域查找变量,未找到才网上查找
    }
    innerFire();
}
fire()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.概念 在JavaScript中,this 是指当前函数中正在执行的上下文环境,因为这门语言拥有四种不同的函数调...
    BluesCurry阅读 1,197评论 0 2
  • 前言 面试官出很多考题,基本都会变着方式来考察this指向,看候选人对JS基础知识是否扎实。读者可以先拉到底部看总...
    若川i阅读 1,149评论 0 10
  • JS中this的指向问题不同于其他语言,JS中的this不是指向定义它的位置,而是在哪里调用它就指向哪里。 JS中...
    艾萨克菊花阅读 527评论 0 0
  • JavaScript中的this指向问题有很多博客在解释,仍然有很多人问。上周我们的开发团队连续两个人遇到相关问题...
    一个敲代码的前端妹子阅读 687评论 0 5
  • 你旋转着球拍 我盯着你的手 一挑一送 乒乓球在球拍上狂舞 你的手在我心中敲鼓 只是一个瞬间 已敲了几个起落
    莫己阅读 217评论 2 6