jirengu / frontend-interview

前端笔试面试题题库
1.29k stars 139 forks source link

JS this 相关问题 #15

Open jirengu opened 7 years ago

jirengu commented 7 years ago

以下代码输出什么?为什么

    var number = 50;
    var obj = {
        number: 60,
        getNum: function () {
        var number = 70;
        return this.number;
    }
    }; 

    alert(obj.getNum());
    alert(obj.getNum.call());
    alert(obj.getNum.call({number:20}));
VamKram commented 7 years ago

(1)this -> obj (2)this -> window (3)this -> {number : 20}

Jemair commented 7 years ago

60 50 20 原因上面写了

mydaoyuan commented 7 years ago

this绑定有四种情况;

  1. 默认绑定:函数独立调用时,this默认绑定到window
  2. 隐式绑定:看函数调用栈,上一个的栈点就是this,console.trace()可查看函数的调用关系
  3. 显式绑定:如call,apply,bind,this指向绑定对象
  4. new绑定:this指向new出来的对象
Reckfu1 commented 6 years ago

605020