JS,在setTimeout中给函数添加改变this指向的.call .apply,却没有时间变化?

JS提问,为什么在setTimeout中给函数添加改变this指向的.call .apply,但是没有时间变化?

请前辈帮我看一下,代码是这样

let obj={name:"yangyuan"};

function fn(){

  console.log(this)             // 这里定时器中this指的是window

} ;  

setTimeout(fn,1000);           

setTimeout(fn.call(obj),2000);    // .call将this指向改变成obj

setTimeout(fn.apply(obj),3000);  // .apply将this指向改变成obj

 

但是在chrom浏览器控制台中.fn.call  .fn.apply 直接就出来了,并没有时间变化请问一下是为什么?

 

call/apply是立即执行函数更改函数体内this指向,所以当然是立即打印了,然后将函数的返回值作为setTimeout要执行的函数

 

要用bind,而不是call/apply

let obj={name:"yangyuan"};

function fn(){
  console.log(this)             // 这里定时器中this指的是window

} ;  

setTimeout(fn,1000);           

setTimeout(fn.bind(obj),2000);    // .call将this指向改变成obj

setTimeout(fn.bind(obj),3000);  // .apply将this指向改变成obj

 

好的,我用bind没问题,就是不明白call/apply为什么会立即执行,感谢前辈解答我的疑问!

大佬牛逼