首页 > 试题广场 >

执行下列选项的程序,输出结果不是Window对象的是()

[单选题]

执行下列选项的程序,输出结果不是Window对象的是()

  • setTimeout(function(){

    console.log(this);
    },1000);
  • function Star(){

    console.log(this);

    }

    new Star();

  • var o = {

    sayHi:()=>{

    console.log(this);

    }
    }

    o.sayHi();

  • (function(){

    console.log(this);

    }());

this的四种绑定形式

(1.默认绑定 2.隐式绑定 3.显式绑定 4.new绑定)
A. 默认绑定,指向window
B. new绑定,指向new创建的对象
C. 以为是隐式绑定指向o?用了箭头函数哦,所以还是window
D. 默认绑定,指向window

不懂this绑定的看下文,或者一句话总结:谁调用this,this指向谁

  • fn() 光秃秃的,默认绑定,指向this,无论在哪里调用都是
    实际上是window.fn() window调用,指向window
  • obj.fn() 隐式绑定,指向obj,obj在调用
  • call()、apply()、bind 显式绑定,要指向谁就写在()里面
  • new fn() new绑定,指向new创建的对象

默认绑定

只要是 fn() 这种孤单单的函数执行的 this都是默认绑定,指向window,无论这个fn()在哪里,被嵌套多少层都是指向window
A.定时器1秒后 执行函数 function(){...} 就是fn()形式,默认绑定指向window
同理D也是

主要问题就是C:不细看以为是指向o,但这里用了箭头函数,箭头函数没有自己的this,会去找外层的this当做自己的this,因此还是指向window。

new绑定

new一个对象所作的四件事情

  1. 新建一个对象
  2. 把this的指向指向这个对象
  3. 执行构造函数内的代码
  4. 返回这个新对象
发表于 2021-12-10 15:18:32 回复(11)
new创建的对象 新建一个对象 把this指向这个对象 执行构造函数内的代码 返回新的对象 使用箭头函数绑定的时候,this是静态绑定的。
编辑于 2022-07-26 11:41:00 回复(0)