huiru2000
2021-04-29 09:49
采纳率: 71.4%
浏览 48
已采纳

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 直接就出来了,并没有时间变化请问一下是为什么?

 

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 已采纳

    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
    已采纳该答案
    评论
    解决 1 无用
    打赏 举报
  • huiru2000 2021-04-29 09:57

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

    评论
    解决 无用
    打赏 举报
  • 大佬牛逼

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题