美文网首页
this指向

this指向

作者: light_follower | 来源:发表于2019-10-22 23:24 被阅读0次

    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()
    

    相关文章

      网友评论

          本文标题:this指向

          本文链接:https://www.haomeiwen.com/subject/njncvctx.html