JS面试知识点2-this

function foo(){
    console.log(this.a)
}
var a = 1;

const obj = {
    a: 2,
    foo: foo
}
obj.foo();
const c = new foo();
function a(){
    return ()=>{
        return ()=>{
            console.log(this)
    }
 }
}

a()()();
let a = {};
let fn = function () {console.log(this)};
fn.bind().bind(a)(); // => ? 
  • 普通调用foo,不管foo被放在什么地方,this一定是window
  • 对于obj.foo(),谁调用了函数,谁就是this,所以this是obj
  • new方式调用,this永远绑定在了c上面,不会被任何方式改变this
  • 箭头函数没有this,箭头函数的this只取决于包裹箭头函数的第一个普通函数的this。因为包裹箭头函数的第一个普通函数a的this为window,所以为window。(对箭头函数适用bind无效)
  • bind函数指定this的方式,this取决于第一个参数,如果第一个参数为空,则为window。(对一个函数进行多次bind,this取决于第一次bind指定的this)
  • 多个规则同时出现? 按照优先级最高的决定this指向。
    • new方式优先级最高->bind/apply/call等函数->obj.foo()->foo普通调用方式
    • 箭头函数的this一旦被绑定,不会再被任何方式改变

猜你喜欢

转载自blog.csdn.net/weixin_43374360/article/details/108997336